前端必须学会Nginx:项目部署不再求人

更新日期: 2025-10-26 阅读: 126 标签: Nginx

很多前端开发者认为,把打包好的dist文件夹放到服务器上就是项目部署。这种想法已经过时了。没有配置Nginx的前端项目,就像没有安全带的汽车,随时可能出问题。


为什么前端要学Nginx?

你可能遇到过这些情况:

  • 用户刷新页面后显示404错误

  • 网站加载速度很慢,性能评分很低

  • 接口调用失败,控制台显示跨域错误

  • 老板问网站为什么打不开,你只能说再等等

然后把问题推给运维?其实这些应该是前端开发者自己解决的问题。

现代前端开发不再只是写页面代码然后交给后端。如果不学习Nginx,就等于把项目的控制权交给别人。

一个不会配置Nginx的前端,能力是不完整的。


Nginx是前端的重要技能

不要再说"我只负责写代码"。真正的高级前端必须懂部署。

静态资源服务
用Node.js做静态资源服务性能不够好,占用资源多。Nginx用C语言编写,能处理大量并发请求,内存占用少,天生适合做静态资源服务。

解决单页应用路由问题
vue Router或react Router使用history模式时,刷新页面就会404。只需要一行配置就能解决:

location / {
    try_files $uri $uri/ /index.html;
}

这行配置能让你的前端路由正常工作。

处理跨域问题
不需要等后端添加跨域头,自己在Nginx中配置:

add_header 'Access-Control-Allow-Origin' $http_origin always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';

前端自己就能解决跨域问题。

性能优化
开启Gzip压缩和缓存能显著提升性能:

gzip on;
gzip_types text/css application/javascript;

location ~* \.(jpg|css|js)$ {
    expires 30d;
}

这些优化措施能大幅提升用户体验。


快速上手Nginx

安装Nginx(Ubuntu系统)

sudo apt update
sudo apt install nginx -y
sudo systemctl start nginx

安装完成后访问服务器IP,看到欢迎页面说明安装成功。

重要目录

  • 配置文件:/etc/nginx/nginx.conf

  • 站点配置:/etc/nginx/sites-available/

  • 启用配置:/etc/nginx/sites-enabled/

  • 静态文件:/var/www/html/

配置检查与重载
修改配置后必须执行:

sudo nginx -t          # 检查配置是否正确
sudo nginx -s reload   # 重新加载配置

不检查配置直接重载可能导致服务异常。


前端常用配置场景

部署Vue/React项目

server {
    listen 80;
    server_name yourdomain.com;

    root /var/www/my-app/dist;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }

    location ~* \.(css|js|png|jpg)$ {
        expires 30d;
        add_header Cache-Control "public, immutable";
    }
}

关键点:

  • root指向打包后的dist目录

  • try_files解决路由问题

  • 静态资源设置缓存

api代理解决跨域

location /api/ {
    rewrite ^/api/(.*)$ /$1 break;
    proxy_pass https://api.yourservice.com;

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

这样配置后:

  • 本地开发使用/api前缀

  • 生产环境自动代理到真实API

  • 不需要修改代码

开启Gzip压缩

在nginx.conf的http块中添加:

gzip on;
gzip_min_length 1k;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/javascript;

效果:JS和CSS文件体积减少60%以上,性能评分显著提升。


进阶配置技巧

启用HTTP/2和HTTPS

listen 443 ssl http2;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/private.key;

HTTP/2支持多路复用,大幅提升资源加载速度。

Brotli压缩
Brotli比Gzip压缩率更高:

brotli on;
brotli_comp_level 6;
brotli_types text/css application/javascript;

适合压缩现代前端框架生成的大文件。

安全加固

add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";

这些安全头能防范常见攻击。

负载均衡

upstream backend {
    server api1.com:3000 weight=2;
    server api2.com:3000;
}

location /api/ {
    proxy_pass http://backend;
}

高流量场景下保证服务可用性。


完整部署示例:电商网站配置

server {
    listen 80;
    server_name shop.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name shop.example.com;

    ssl_certificate /etc/ssl/certs/shop.example.com.crt;
    ssl_certificate_key /etc/ssl/private/shop.example.com.key;

    root /var/www/ecommerce/dist;
    index index.html;

    # 开启Gzip压缩
    gzip on;
    gzip_types text/css application/javascript;

    # 主路由配置
    location / {
        try_files $uri $uri/ /index.html;
    }

    # 静态资源缓存
    location ~* \.(css|js|png|svg|ico)$ {
        expires 30d;
        add_header Cache-Control "public, immutable";
        access_log off;
    }

    # API代理
    location /api/ {
        rewrite ^/api/(.*)$ /$1 break;
        proxy_pass https://api.shop.example.com;
        
        # 跨域头
        add_header 'Access-Control-Allow-Origin' $http_origin always;
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization';
        
        # 代理头
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    # 安全配置:禁止访问敏感文件
    location ~ /\.(env|git|ht) {
        deny all;
        return 404;
    }

    # 错误页面
    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
}

这个配置包含:

  • HTTP到HTTPS重定向

  • 单页应用路由支持

  • 静态资源缓存

  • API代理和跨域处理

  • 基础安全防护

  • 错误页面处理


常见问题解决

配置修改不生效

  • 检查配置语法:nginx -t

  • 重新加载配置:nginx -s reload

  • 确认配置在sites-enabled目录

try_files仍然404

  • 检查root路径是否正确

  • 确认index.html文件存在

  • 检查文件权限

代理返回502错误

  • 检查proxy_pass地址

  • 确认后端服务正常运行

  • 检查防火墙设置


掌握部署能力提升职业价值

十年前,前端只需要懂HTML、CSS和JavaScript。现在,前端需要懂构建工具、性能优化和项目部署。

Nginx不是运维的专属工具,而是前端开发者必须掌握的技能。

真正优秀的前端开发者,应该能够掌控从代码编写到用户访问的完整流程。

从现在开始学习Nginx配置,让你的项目部署更加专业可靠。这将大大提升你的技术能力和职场竞争力。

本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!

链接: https://fly63.com/article/detial/13051

Nginx常用配置--nginx之proxy_pass代理后端https请求完全解析

前提条件:nginx源码或nginx plus源码、一个代理服务器或一个代理服务器组、SSL证书和私钥,你可以从一个可信任证书颁发机构(CA)购买一个服务器证书,或者你可以使用openssl库创建一个内部CA签名

nginx:支持https

查看nginx模块,如果看到with-ssl那就是有的。注册ssl证书并下载,配置nginx就比如说,还没有配置https前你配置了80,那么你http://域名/直接默认访问80端口,那么一样的

nginx做http向https的自动跳转

首先让nginx服务器监听两个端口,分别是80端口和443端口,注意监听443端口的时候需要配置证书的认证以及创建自签名证书!关于证书的认证的以及创建自签名的证书,nginx的配置如下,只给出了两个server的配置,可以直接复制到http块中。

Nginx配置https和wss

常见的服务器有三种:Nginx、IIS、Apache,都可以配置https,但是没必要全部知道,因为Nginx可以起到反向代理的作用,会配置Nginx就足够了。在/etc/nginx/conf.d目录下新建https.conf

nginx加速_开启Gzip/文件做缓存

开启Gzip:给Nginx上 ngx_http_gzip_module 这个模块,用 nginx -V 命令查看 configure arguments 是否有,没有的话需要编译加载这个模块;给文件做缓存:图片文件,字体文件,js和css都是些可以用来缓存的文件

nginx和php-fpm的进程启停重载总结

ginx和php-fpm对于-USR2、-HUP信号的处理方式不一样:TERM, INT(快速退出,当前的请求不执行完成就退出),QUIT (优雅退出,执行完当前的请求后退出)

Nginx解析PHP的原理 | CGI、FastCGI及php-fpm的关系

php-fpm采用master/worker架构设计, master进程负责CGI、PHP公共环境的初始化及事件监听操作。worker进程负责请求的处理功能。在worker进程处理请求时,无需再次初始化PHP运行环境,这也是php-fpm性能优异的原因之一

Nginx 禁止某 IP 访问

总有一些不怀好意的人来访问我的网站,而且频率还很高,所以就用简单的方式禁止访问,就用 Nginx 来实现。想要添加黑名单,只要在 blocksip.conf 中添加 IP ,然后 reload 即可。

Nginx服务器 之反向代理与负载均衡

客户端就可以通过请求代理服务器,获取想要的资源,但客户端并不知道给他资源的是哪个服务器。这种方式就是反向代理。当一台服务器的单位时间内的访问量越大的时候,服务器的压力会越大。我们通常通过负载均衡的方式来分担服务器的压力。

前端如何通过Nginx代理做到跨域访问API接口

Nginx作为反向代理服务器,就是把http请求转发到另一个或者一些服务器上。通过把本地一个url前缀映射到要跨域访问的web服务器上,就可以实现跨域访问。对于浏览器来说,访问的就是同源服务器上的一个url

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!