当前位置: 首页 > news >正文

Nginx配置踩坑与性能调优

前言

Nginx配置看起来简单,但坑真的多。一个斜杠的差异、location匹配顺序、超时设置不当,都可能导致莫名其妙的问题。

这篇整理Nginx常见的配置错误和性能优化方案,都是生产环境验证过的配置。


一、配置踩坑

1.1 proxy_pass结尾的斜杠

这个坑很常见。

# 前端请求 /api/users # 写法1 location /api { proxy_pass http://backend; } # 后端收到:/api/users # 写法2(多了个斜杠) location /api { proxy_pass http://backend/; } # 后端收到:/users ← /api没了!

就差一个斜杠,效果完全不一样。

简单记:proxy_pass后面带路径(包括单独的/),location匹配的部分会被替换掉;不带路径,原样转发。

1.2 location匹配顺序

location /api { proxy_pass http://backend; } location ~ /api/v[0-9]+ { proxy_pass http://backend-new; }

访问/api/v2/users,你觉得走哪个?

很多人以为按顺序,其实不是。正则匹配~优先于普通前缀匹配。所以走的是第二个。

但如果你想让某个路径不走正则

location ^~ /api/internal { # ^~ 会阻止后面的正则匹配 proxy_pass http://internal-backend; } location ~ /api { proxy_pass http://backend; }

^~前缀匹配的优先级比正则高。

完整优先级:=精确 >^~前缀 >~正则 > 普通前缀(取最长)

1.3 Vue/React项目刷新404

单页应用部署后,直接访问首页没问题,但刷新或直接访问子路由就404。

location / { root /var/www/dist; try_files $uri $uri/ /index.html; }

这个配置应该没问题,但还是404?

检查这几个:

1、index.html存在吗?

ls-la /var/www/dist/index.html

2、SELinux(CentOS的大坑)

getenforce# 如果是Enforcing# 临时关闭测试setenforce0# 或者正确设置contextchcon -R -t httpd_sys_content_t /var/www/dist

SELinux是CentOS上的常见坑。

1.4 502 Bad Gateway

高并发的时候出现502,后端其实没挂。

通常是upstream的连接数不够了。加上keepalive:

upstream backend { server 127.0.0.1:8080; keepalive 100; # 保持100个空闲连接 } location / { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Connection ""; # 这行很重要 }

Connection ""是为了让Nginx用HTTP/1.1的keepalive,不然每次请求都新建连接。

1.5 上传大文件413

413 Request Entity Too Large

Nginx默认只允许1M的请求体:

client_max_body_size 100m;

放在http、server或location块都行。

1.6 WebSocket连接断开

WebSocket连上没多久就断了,通常是超时:

location /ws { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # 关键:超时设成长一点 proxy_read_timeout 3600s; proxy_send_timeout 3600s; }

默认60秒没数据就断了,WebSocket要设长一点。

1.7 缓存不生效

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

配置了但浏览器还是每次都请求?

检查后端有没有返回Cache-Control: no-cache,这会覆盖你的设置。

location ~* \.(js|css|png)$ { proxy_pass http://backend; proxy_ignore_headers Cache-Control Expires; # 忽略后端的 expires 30d; }

二、性能调优

2.1 worker配置

worker_processes auto; # 自动等于CPU核数 events { worker_connections 10240; use epoll; multi_accept on; }

2.2 Gzip压缩

gzip on; gzip_min_length 1k; # 太小的不压缩 gzip_comp_level 5; # 压缩级别,5够用了 gzip_types text/plain text/css application/json application/javascript;

2.3 静态文件缓存

location ~* \.(js|css|png|jpg|gif|ico)$ { expires 1y; access_log off; # 静态文件不记日志,省IO }

2.4 sendfile零拷贝

sendfile on; # 零拷贝 tcp_nopush on; # 合并小包 tcp_nodelay on;

三、配置模板

3.1 反向代理

server { listen 80; server_name api.example.com; location / { proxy_pass http://127.0.0.1:8080; proxy_http_version 1.1; 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; } }

3.2 前端SPA

server { listen 80; server_name www.example.com; root /var/www/dist; location / { try_files $uri $uri/ /index.html; } location /api { proxy_pass http://127.0.0.1:8080; } location ~* \.(js|css|png|jpg|svg|woff2)$ { expires 1y; } }

四、调试技巧

4.1 检查配置

nginx -t# 语法检查nginx -T# 打印完整配置

4.2 打印变量

不确定变量值是什么的时候:

location /debug { return 200 "uri=$uri\nhost=$host\nargs=$args\n"; }

4.3 查看连接状态

location /status { stub_status on; allow 127.0.0.1; deny all; }

然后curl localhost/status看当前连接数。


总结

Nginx配置常见问题:

问题原因解决
502/504upstream连接问题检查后端、增加超时、keepalive
413文件太大client_max_body_size
404location匹配/路径错误检查root/alias、try_files
缓存不生效后端覆盖proxy_ignore_headers
WebSocket断开超时/头部问题设置upgrade头和超时

性能优化核心:

  • 系统层:worker数、连接数、文件描述符
  • 传输层:Gzip、sendfile
  • 缓存层:静态文件expires、代理缓存
  • 连接层:keepalive

有问题评论区交流。

http://www.jsqmd.com/news/342068/

相关文章:

  • 许昌英语雅思培训机构推荐、2026权威测评出国雅思辅导机构口碑榜 - 苏木2025
  • Instagram与TikTok双管齐下:B2B行业海外新媒体运营推广公司及代运营服务商实战推荐 - 品牌2025
  • 漯河英语雅思培训机构推荐、2026权威测评出国雅思辅导机构口碑榜 - 苏木2025
  • 断言及静态断言
  • 许昌英语雅思培训机构推荐.2026权威测评出国雅思辅导机构口碑榜 - 苏木2025
  • 许昌英语雅思培训机构推荐,2026权威测评出国雅思辅导机构口碑榜 - 苏木2025
  • 2026年谷歌海外GEO优化外贸推广服务商/公司测评:深圳昊客网络脱颖而出 - 深圳昊客网络
  • 阿里云渠道商:阿里云弹性伸缩如何助力海量数据采集?
  • .NET 中如何快速实现 List 集合去重?
  • 扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
  • 许昌英语雅思培训机构推荐;2026权威测评出国雅思辅导机构口碑榜 - 苏木2025
  • 选水浴\全温\气浴恒温振荡器,认准这些性能好的厂家! - 品牌推荐大师
  • Chebyshev Polynomials 与现代计算
  • 2026年龙门吊厂家综合对比:电动/无轨/单梁/集装箱龙门吊多场景应用分析 - 品牌推荐官
  • 毕业论文神器!实力封神的AI论文软件 —— 千笔写作工具
  • [信息论与编码理论专题-13]:如果说信息论使计算机实现人的思维提供了理论基础,那么什么理论使得计算机AI可以实现人的意识提供理论基础呢?
  • PostgreSQL、达梦、高斯、MySQL 区别
  • 2026国内最新云顶棉生产厂家top5推荐!广东广州等地优质云顶棉公司榜单发布,全品类服务双优助力服装产业升级 - 品牌推荐2026
  • C++成员访问权限以及继承权限
  • 数据驱动,安全可控:2026年企业智能BI私有化部署实力厂商推荐指南 - 品牌2025
  • 浙江餐饮业擦手纸推荐品牌 - 中媒介
  • 2026 AIGC 降重实用软件推荐(免费 + 高性价比)
  • 学习SQL心得
  • 2026户外微型水质在线监测系统(监测站)行业深度解析与优质厂家全景推荐 - 品牌推荐大师
  • 抗噪4键触摸感应玩具触摸芯片VK36N4B抗干扰4通道触摸芯片原厂提供技术支持
  • 学霸同款9个降AI率网站,千笔·降AIGC助手帮你精准降AIGC
  • 贴身定制,敏捷响应:2026年更懂本地化需求的BI部署方案商推荐名单 - 品牌2025
  • 2026年深圳到兰州整车运输公司推荐:到济南整车运输/到成都整车运输/到长沙整车运输/到福州整车运输/到西宁整车运输精选 - 品牌推荐官
  • gRPC C++ 快速编译与上手
  • STM32启动文件