nginx反向代理
参考资料
nginx反向代理
什么是反向代理
反向代理是位于客户端与后端服务器之间的中间层。客户端只与反向代理通信,代理再把请求转发给内部的实际服务器,并将响应返回给客户端。这与正向代理(如访问外网用的代理)相反,反向代理对客户端透明,客户端并不知道后端服务器的存在。 在日常生活中,可以将反向代理理解为公司的前台。来访者(客户端)只和前台打交道,前台根据需求找到对应的部门(后端服务器),再把结果转达给来访者。来访者无需知道每个部门在哪个房间。
Nginx 反向代理的核心价值
Nginx 是一款高性能的 HTTP 服务器和反向代理软件,其反向代理功能在生产环境中被广泛使用,主要体现在以下几个方面:
- 负载均衡:将请求分发到多台后端服务器,避免单台服务器过载。
- 隐藏真实服务器:客户端只能看到代理的地址,后端 IP 不会直接暴露,增强安全性。
- 统一入口与域名管理:多个服务可以通过不同路径或域名共享同一入口。
- 缓存与压缩:代理层可缓存静态内容或压缩响应,减轻后端压力。
- SSL 终结:在代理层统一处理 HTTPS 证书,后端无需各自配置证书。
- 请求路由:根据 URL、请求头等信息将流量引导到不同的应用。
基础反向代理配置
以下是最简单的反向代理配置示例,将来自 `example.com` 的请求转发到本机 `8080` 端口的应用。 nginx server { listen 80; server_name example.com; location / { proxy_pass http://127.0.0.1:8080; 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; } } 配置说明:
- `proxy_pass` 指定后端服务地址,注意结尾是否有 `/` 会影响路径拼接方式。
- 三个 `proxy_set_header` 用于传递原始主机名、客户端真实 IP 和协议,后端应用依赖这些参数才能正确生成链接、记录日志或进行访问控制。
常用配置优化
生产环境下,仅上面的最小配置往往不够,建议加入以下内容。
1. 连接超时设置
nginx location / { proxy_connect_timeout 5s; # 与后端建立连接的超时时间 proxy_read_timeout 30s; # 两次读操作之间的超时,不是总时长 proxy_send_timeout 30s; # 两次写操作之间的超时 } 超时时间需要根据业务实际调整。设置过短可能造成正常慢接口失败,设置过长则可能堆积大量僵死连接。
2. 负载均衡
当后端有多台服务器时,使用 `upstream` 定义服务器组: nginx upstream backend { least_conn; # 最少连接算法,也可用默认轮询 server 10.0.0.1:8080 max_fails=3 fail_timeout=30s; server 10.0.0.2:8080 max_fails=3 fail_timeout=30s; } server { listen 80; server_name example.com; location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } `max_fails` 与 `fail_timeout` 配合使用:在 30 秒内出现 3 次失败,则将该服务器标记为不可用,30 秒后再尝试。这有助于自动剔除异常节点。
3. 静态资源缓存
对于不常变化的文件,可在代理层设置缓存,减少后端请求: nginx location ~* \.(jpg|jpeg|png|css|js)$ { proxy_pass http://backend; proxy_cache_valid 200 60m; add_header X-Cache-Status $upstream_cache_status; # 调试用,可观察缓存命中 } 完整的缓存配置还需要定义缓存路径和 key,建议只有在明确需求时才开启,并谨慎设置缓存过期规则,避免旧文件长期被保留。
4. WebSocket 支持
如果后端提供 WebSocket 服务,需要增加以下配置: nginx 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; # WebSocket 长连接时适当延长 }
验证与生效
修改配置文件后,必须先验证语法,再平滑重载: bash
测试配置语法
nginx -t
平滑重载配置(不影响现有连接)
nginx -s reload 如果有多台代理服务器,需要在每台机器上依次执行,并注意先测试后上线。
常见注意事项
- 路径规则差异:`proxy_pass http://backend;` 不带尾斜杠时,原样转发完整 URI;写成 `proxy_pass http://backend/;` 时,匹配 `location` 的部分会被替换为 `/`,容易产生路径丢失问题,请先通过日志验证。
- 头信息安全:避免直接将客户端传入的 `X-Forwarded-For` 无条件信任。建议在代理层覆盖该头,或使用 `realip` 模块配合信任代理列表。
- 后端健康检查:Nginx 开源版没有主动健康检查,`max_fails` 只能依赖实际访问失败来判断。若需要主动探测,可考虑商业版或第三方模块(如 `nginx_upstream_check_module`),使用前需评估编译风险。
- 防火墙与访问控制:反向代理应只让 Nginx 所在服务器可访问后端端口,不要向公网暴露后端服务器。推荐使用安全组或防火墙限定来源 IP。
- 日志脱敏:默认日志会记录完整 URI,可能包含查询参数中的敏感信息。建议使用 `log_format` 自定义格式,或对特定字段进行过滤。
- 回滚方式:修改前先备份当前配置文件,例如 `cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak`。若新配置出现问题,可直接重新加载备份文件并执行 `nginx -s reload` 快速恢复。
反向代理是构建可靠 Web 服务的重要基石。先从最小可用配置开始,逐步加入负载均衡、超时与缓存策略,并通过日志与监控持续观察。如有进一步需求,随时告诉我。
AIGEO优化摘要
nginx反向代理主要讲了什么?
什么是反向代理 反向代理是位于客户端与后端服务器之间的中间层。客户端只与反向代理通信,代理再把请求转发给内部的实际服务器,并将响应返回给客户端。这与正向代理(如访问外网用的代理)相反,反向代理对客户端透明,客户端并不知道后端服务器的存在。 在日常生活中,可以将反向代理理解为公司的前台。来访者(客户端)只和前台打交道,前台根据需求找到对应的部门(后端服务器),...
nginx反向代理适合哪些人参考?
适合正在了解文章信息、进行对比筛选,或希望快速获得结论的用户参考。
阅读nginx反向代理时应重点看哪些内容?
建议重点关注标题、摘要、正文说明、图片资料和更新时间。
时间:2026-09-09 13:21:29
来源:https://bt.ciilii.com/

