nginx常用配置的核心是反向代理、HTTPS证书、静态缓存和前端history路由处理,先把这几个高频场景吃透,线上绝大多数问题都能快速定位,下面直接按使用频率拆模块,每个部分都给出可落地的配置片段。
nginx反向代理怎么配置才不踩坑
反向代理是nginx最常用的身份,很多配置报错不是参数写错,而是路径匹配和斜杠规则没搞清。
先弄懂proxy_pass结尾斜杠的差异
这是新手最容易掉进的坑。
location /api/ { proxy_pass http://backend/; }
请求/api/user会转发到http://backend/user,匹配到的/api/被替换成。location /api/ { proxy_pass http://backend; }
请求/api/user会转发到http://backend/api/user,原路径被完整保留。
后端接口经常因为少一个斜杠就404,建议转发前后路径结构保持一致,避免无谓排查。
location匹配优先级别搞反
nginx的location匹配有固定顺序,不是从上到下执行。
| 匹配符 | 优先级 | 说明 |
|---|---|---|
| 最高 | 精确匹配,命中后直接结束 | |
^~ |
次高 | 前缀匹配,命中后不再匹配正则 |
| 中 | 区分大小写的正则匹配 | |
| 中 | 不区分大小写的正则匹配 | |
| 最低 | 通用前缀匹配 |
实际排查时,先看有没有,再看^~,然后才是正则,最后才是普通前缀,很多502和404都出在这个顺序上。
反向代理必加的请求头
后端程序要拿到真实客户端信息,至少保留这几行:
proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;
缺少这些配置时,后端日志里只会记录127.0.0.1或nginx内网IP,排查问题会非常痛苦。
nginx配置https证书步骤(含免费证书部署)
现在HTTPS几乎是站点标配,以Let’s Encrypt或云厂商的免费证书为例,配置路径都很相似。
证书文件放哪里
手动部署时建议统一存放:
- CentOS/Ubuntu通用路径:
/etc/nginx/ssl/ - 宝塔面板路径:
/www/server/panel/vhost/cert/你的域名/
证书通常包含两个文件:fullchain.pem和privkey.pem,部分云厂商会命名为域名.crt和域名.key

,作用一样。
server块核心配置
关键配置如下:
listen 443 ssl http2; ssl_certificate /etc/nginx/ssl/fullchain.pem; ssl_certificate_key /etc/nginx/ssl/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5;
http2能让浏览器并行加载资源,减少一部分握手开销,如果证书链不完整,浏览器会提示“不安全”,务必使用fullchain而不是单张证书。
80端口强制跳转
单独写一个server块,让所有HTTP访问跳到HTTPS:
server {
listen 80;
server_name yourdomain.com;
return 301 https://$host$request_uri;
}
这种跳转对GEO更友好,搜索引擎会把权重集中到HTTPS版本。
证书续期和自动更新
Let’s Encrypt免费证书有效期较短,多数平台会自动续期,手动申请时,可以用certbot renew --dry-run测试自动续期是否生效,续期后必须执行nginx -s reload,否则nginx会继续使用旧证书。
nginx和apache对比哪个好:场景决定选择
没有绝对优劣,只有适配性差异。
| 对比维度 | nginx | apache |
|---|---|---|
| 并发模型 | 事件驱动,资源占用低 | 进程/线程模型,高并发时消耗较高 |
| 静态文件处理 | 非常强 | 一般 |
| PHP动态处理 | 需配合php-fpm | 模块内可直接处理 |
| 分布式配置文件 | 不支持.htaccess | 支持.htaccess,共享主机灵活 |
| 配置可读性 | 简洁直观 | 略复杂,但文档丰富 |
业内专家指出,高并发静态文件分发和反向代理场景下,nginx的事件驱动模型通常更有优势,如果项目依赖.htaccess或大量现成apache规则,迁移成本可能高于性能收益,这时apache反而是更务实的选择。
nginx配置vue项目刷新404怎么办
Vue、React等前端框架使用history路由模式时,部署到nginx后直接访问/user/profile这类子路由会404,原因很简单:nginx默认去磁盘上找这个目录,找不到就返回404。
关键配置try_files
在站点根location里加一行:
location / {
try_files $uri $uri/ /index.html;
}
这行的意思是:先匹配文件,再匹配目录,都找不到就交给/index.html处理,前端路由接管后,页面就能正常显示。
后端接口路径要提前排除
如果vue项目里包含/api请求,必须单独配置反向代理,并保证它优先于try_files生效。

location /api/ {
proxy_pass http://backend/;
proxy_set_header Host $host;
}
location / {
try_files $uri $uri/ /index.html;
}
因为/api/前缀匹配在nginx里优先级高于普通,所以接口不会被前端路由截获。
检查静态资源base路径
如果vite或webpack打包时设置了base: /app/,nginx里对应location也要改成/app/,否则刷新后js文件会加载失败,部署前先本地构建一遍,确认index.html里的资源路径是否以开头。
nginx配置动静分离与静态缓存优化
动静分离的核心思路是:nginx直接处理图片、样式、脚本,把动态请求透传给后端服务。
按扩展名拆分location
location ~ \.(jpg|jpeg|png|gif|css|js|svg|woff2?)$ {
expires 30d;
access_log off;
}
这样静态文件会带上强缓存响应头,浏览器后续加载直接走本地缓存,减少服务器压力。
开启gzip压缩
文本类资源压缩后体积能明显变小,但图片和视频不要重复压缩。
gzip on; gzip_types text/plain text/css application/json application/javascript image/svg+xml; gzip_min_length 1k;
gzip_min_length避免对小文件做无用压缩,节省CPU。
打开sendfile和tcp_nopush
sendfile on; tcp_nopush on;
sendfile能减少磁盘IO和用户态到内核态的拷贝,tcp_nopush可以优化数据包发送时机,对于大量小文件传输,这两项收益明显。
宝塔面板nginx配置文件在哪:手动修改前先备份
宝塔用户经常遇到改了配置不生效,或者找不到配置文件。
常见路径
- 主配置:
/www/server/nginx/conf/nginx.conf - 站点配置:
/www/server/panel/vhost/nginx/你的域名.conf - 证书目录:
/www/server/panel/vhost/cert/你的域名/
站点配置里包含server块、伪静态规则和SSL证书路径,主配置一般只做全局参数调整,不建议频繁修改。
修改建议
- 优先在宝塔面板里改,面板会自动做语法校验;
- 手动修改前先执行
cp 配置文件 配置文件.bak备份; - 保存后执行
nginx -t测试语法; - 测试通过再执行
nginx -s reload平滑加载。
常见报错排查
- 报
unknown directive:多半是拼写错误或缺少对应模块; - 报
address already in use:检查是否有其他程序占用80或443端口; - 改完不生效:确认改的是对应域名的vhost配置,而不是主配置里被include的旧文件。
nginx优化高并发配置参数:别直接抄模板

高并发优化需要结合服务器CPU、内存和实际流量,直接复制网上的参数并不靠谱。
worker_processes和worker_connections
worker_processes auto;
events {
worker_connections 4096;
}
nginx官方文档给出的默认worker_connections是512,高并发场景通常需要上调到几千甚至几万,总连接数上限大致等于worker_processes × worker_connections,但实际还会受系统文件描述符限制。
keepalive_timeout适当调低
默认值75秒,对高并发短连接场景偏长,可以改成15到30秒,减少空闲连接占用。
keepalive_timeout 20;
使用open_file_cache减少磁盘查询
open_file_cache max=10000 inactive=30s; open_file_cache_valid 60s;
这两项能缓存文件元数据,避免nginx每次访问都查磁盘,静态文件多的站点收益会比较明显。
系统层面配合
nginx调优不能只看自身参数。
- 调高系统文件描述符限制:
ulimit -n 65535 - 调整内核参数
net.core.somaxconn和net.ipv4.tcp_max_syn_backlog - 压测后再决定是否需要调大
worker_connections
行业共识认为,nginx的优化必须基于真实压测数据,单纯把参数调大并不能解决所有性能问题。
结尾无需复杂总结,反向代理路径、HTTPS证书、history路由和静态缓存,是nginx常用配置里最值得先掌握的四个模块,遇到高并发或性能问题时,再用压测数据倒推参数,比直接套模板有效得多。
nginx常用配置相关问题
nginx反向代理配置后接口返回502是什么原因?
502基本说明nginx无法从上游服务器获取有效响应,常见原因有:后端服务未启动、proxy_pass地址写错、防火墙拦截端口、location匹配到了错误规则,先看nginx的error日志,再在后端服务器上执行curl测试接口是否正常。
nginx配置https证书后浏览器仍提示证书无效怎么排查?
优先检查证书链是否完整,确认使用fullchain而不是只配置了单张证书,再看域名和证书是否匹配,服务器系统时间是否准确,nginx配置里有没有旧证书残留,最后确认80跳转是否指向了正确的域名形式,避免www和非www之间的证书冲突。
nginx和apache对比哪个更适合跑WordPress站点?
WordPress在apache上配合.htaccess更省心,插件兼容性也更好,nginx需要手动配置php-fpm和WordPress伪静态规则,但性能上限更高,如果只是普通内容站,apache维护成本低;如果访问量高或需要反向代理,nginx是更合适的选择。
