下面这些坑,比语法错误更常见。
1. 以为 server 和 location 差不多。
不是。server 是“哪道闸门”,location 是“闸门里的哪条车道”。
2. 以为 location 是按书写顺序从上到下随便匹配。
不是。它有明确的精确匹配、最长前缀、正则优先规则。
3. 把 proxy_pass 结尾斜杠写错。
这会直接导致后端收到的 URI 变形,轻则 404,重则整套路由全错。
4. 改完配置直接 reload,不先 nginx -t。
这等于城市总闸口不验图纸就开工。
5. 混淆 root 和 alias。root 是“把 URI 接到某个根目录后面”;alias 是“把当前 location 匹配段替换成另一个目录”。这两者路径拼接语义不同,写错经常就是静态资源 404。
6. 在 location 里到处堆 if。
很多时候你真正要的,是更清晰的 location 分流、return、try_files,不是把闸口写成半套脚本语言。
7. 所有请求都丢给后端,连静态文件也不在 Nginx 处理。
这等于让每一辆送传单的车都开进市政府大厅。
8. 负载均衡后端是有状态单机,却还默认轮询。
结果就是用户一会儿登录、一会儿掉线。
9. 只看浏览器报错,不看 Nginx 日志。
总闸口明明已经写下了事故记录,你却只看门口堵车。
10. 把 Nginx 当成业务引擎。
Nginx 适合做边缘分流、代理、缓存、TLS、静态资源;复杂业务编排、用户态判断、数据库查询,不是它的主战场。