哎你经历过吗?公司官网上午还好好的,下午突然抽风显示502错误,老板急得直跳脚!去年我就栽在这坑里——当时用Nginx做反向代理,结果把域名配置搞砸了。今天就带新手们避坑,保你三分钟搞懂门道!
反向代理到底是个啥玩意?
简单说就像个智能前台,把访客带到正确的办公室。比如你有三个部门:
- 官网(http://www.xxx.com)
- 商城(shop.xxx.com)
- 后台(admin.xxx.com)
Nginx就是那个记住所有人长相的前台,看一眼访客要找谁,立马带对地方。不过这个前台有点强迫症,配置文件的标点符号错一个都不干活!
新手必懂的三大配置要点
server_name别写错:
把主域名和子域名用空格隔开,比如:
server_name http://www.xxx.com shop.xxx.com;
要是漏写分号,整个配置文件直接**!proxy_pass加不加斜杠:
- 加斜杠:把请求转给http://backend/new-path
- 不加斜杠:把请求转给http://backend/old-path/new-path
去年我就因为这破事,把用户订单导到测试环境去了...
缓存策略要合理:
场景 缓存时间 配置示例 静态资源 30天 proxy_cache_valid 200 304 30d; 动态接口 5分钟 proxy_cache_valid5m; 实时数据 不缓存 proxy_no_cache $http_pragma;
域名配置的隐藏陷阱
上周帮客户处理个奇葩问题:明明配置了SSL证书,Chrome还是显示不安全。最后发现是Nginx版本太老,不支持TLS1.3!
安全加固四步走:
- 更新到最新稳定版(1.25.3以上)
- 配置SSL协议白名单:
ssl_protocols TLSv1.2 TLSv1.3; - 开启OCSP装订加速:
ssl_stapling on; - 设置HSTS头强制HTTPS:
add_header Strict-Transport-Security "max-age=63072000";
记住这个血泪教训:用在线检测工具(SSL Labs)扫一遍,比手动检查靠谱十倍!
性能优化的骚操作
某电商平台用这招把并发处理能力提升了3倍:
- 启用keepalive长连接:
proxy_http_version 1.1;
proxy_set_header Connection ""; - 开启gzip压缩:
gzip_proxied any; - 分配专属内存池:
proxy_buffers 16 32k;
proxy_buffer_size 64k;
不过要注意!有个客户照抄配置结果内存爆了,后来发现是他的后端响应头太大,把proxy_buffer_size调到128k才解决...
调试技巧大放送
遇到502错误别慌,按这个顺序查:
- 看error.log报错信息(路径:/var/log/nginx/error.log)
- 检查后端服务是否存活(curl -I http://backend)
- 测试域名解析是否正常(nslookup shop.xxx.com)
- 验证防火墙规则(iptables -L -n)
最绝的是在location块加调试头:
add_header X-Proxied $proxy_host;
这样在浏览器开发者工具就能看到请求被转到哪去了!
说到个人观点,我觉得现在最该警惕的是证书自动续期。去年用acme.sh自动续期SSL证书,结果crontab任务没执行成功,导致凌晨三点官网崩了...建议每月手动检查一次证书状态,这比配置反向代理本身更重要!