参考资料

  1. nginx重启keepalived
  2. nginx 配置域名
  3. nginx反向代理的主要作用
  4. Nginx监控工具(Prometheus)配置详细说明以及案例
  5. nginx配置负载均衡
  6. PHP-FPM绑定本机所有IP详细说明以及案例
  7. nginx是什么意思中文翻译
  8. 详细说明:针对特定攻击的防御

nginx反向代理配置详解

nginx反向代理配置详解

什么是反向代理

反向代理(Reverse Proxy)是代理服务器的一种工作模式。它位于客户端和上游服务器之间,接收来自客户端的请求,再将请求转发给内部的上游服务器,并把上游返回的结果返回给客户端。对客户端而言,反向代理服务器就是真实的服务器,客户端不需要知道上游服务器的具体地址。 nginx 是高性能的 Web 服务器和反向代理服务器,因其配置灵活、资源占用低,被广泛用于统一入口、负载均衡、HTTPS 终止、动静分离等场景。

基础配置结构

一个最简单的反向代理配置,在 `server` 块中使用 `location` 和 `proxy_pass` 即可实现: 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; } } 说明:

  • `listen 80`:监听外网的 80 端口。
  • `server_name`:匹配的域名。
  • `location /`:匹配所有以 `/` 开头的请求。
  • `proxy_pass`:指定要转发到的上游服务地址。
  • `proxy_set_header`:将客户端的原始信息(如 Host、真实 IP)传给上游,否则上游可能看到的是代理服务器的 IP。

通过路径转发到不同服务

在同一个域名下,希望不同路径由不同后端服务处理时,可以使用多个 `location`: nginx server { listen 80; server_name example.com; location /api/ { proxy_pass http://192.168.1.10:3000; } location /static/ { proxy_pass http://192.168.1.11:8080; } location / { proxy_pass http://192.168.1.12:9000; } } 注意:`proxy_pass` 地址后是否带 `/`,会影响路径转发规则。例如:

  • `location /api/` 且 `proxy_pass http://backend;`,请求 `/api/user` 会转发到 `http://backend/api/user`。
  • 如果 `proxy_pass http://backend/;`,请求 `/api/user` 会转发到 `http://backend/user`(`/api/` 被替换成 `/`)。

请根据实际需求选择,避免路径错误。

使用 upstream 配置负载均衡

当单台服务压力较大时,可以用 `upstream` 定义一组后端服务器,nginx 默认采用轮询方式分发请求: nginx http { upstream backend_servers { server 192.168.1.101 weight=1; server 192.168.1.102 weight=2; server 192.168.1.103 backup; } server { listen 80; server_name example.com; location / { proxy_pass http://backend_servers; } } } 常用参数:

  • `weight`:权重,权重越高被分配到的频率越大。
  • `backup`:热备服务器,在非备份服务器均不可用时才启用。
  • `max_fails` 和 `fail_timeout`:定义失败次数与检测周期,合理设置可提高容错能力。

若需要会话保持,可以考虑 `ip_hash` 或 `hash $request_uri` 等方式,但需根据业务特点谨慎使用。

常用 proxy 参数说明

在反向代理中,以下几个响应相关的参数也比较常用: nginx location / { proxy_pass http://backend; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Connection ""; proxy_connect_timeout 5s; proxy_read_timeout 10s; proxy_send_timeout 10s; proxy_buffering off; } 参数含义简析:

  • `proxy_redirect off`:关闭由 nginx 重写上游返回的 `Location` 响应头,通常用于不改变上游的跳转逻辑。
  • `proxy_http_version 1.1` 与 `proxy_set_header Connection ""`:如果后端需要 HTTP/1.1 或长连接,可这样配置。
  • `proxy_connect_timeout`:与上游建立连接的超时时间。
  • `proxy_read_timeout`:连续两次从上游读取响应的最长时间。
  • `proxy_send_timeout`:连续两次向上游发送请求的最长时间。
  • `proxy_buffering off`:关闭缓冲,适用于 SSE(Server-Sent Events)或需要即时返回数据的场景。

WebSocket 反向代理配置

nginx 支持 WebSocket 反向代理,关键在于升级协议的请求头。示例: nginx location /ws/ { proxy_pass http://ws_backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_read_timeout 60s; } 如果缺少 `Upgrade` 和 `Connection` 的配置,WebSocket 握手可能失败。根据实际情况调整超时时间。

配置 HTTPS 反向代理

在 nginx 中终止 HTTPS 并将请求转发到内部 HTTP 服务,是常见的做法。基础配置如下: nginx server { listen 443 ssl; server_name example.com; ssl_certificate /etc/nginx/ssl/example.com.crt; ssl_certificate_key /etc/nginx/ssl/example.com.key; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto $scheme; } } 如果使用了负载均衡器或 CDN,可以在此基础上增加 `X-Forwarded-For`、`X-Forwarded-Proto` 等头,帮助后端识别原始协议和客户端 IP。

检查与重载配置

修改 nginx 配置后,务必先检查语法是否正确: bash nginx -t 确认无误后平滑重载: bash nginx -s reload 如果在容器内或使用第三方系统管理,可执行 `nginx -t && nginx -s reload` 或使用类似 `systemctl reload nginx` 的命令。

注意事项

  • 确保上游服务地址、端口可达,且防火墙没有拦截 nginx 到上游的访问。
  • 配置了 `proxy_pass` 后,建议同步配置 `proxy_set_header`,避免后端拿不到客户端真实 IP 或 $host 被替换。
  • `location` 匹配规则遵循 nginx 的前缀匹配和正则匹配规则,配置多个 location 时要注意优先顺序,避免请求被错误转发。
  • 如果上游返回 502、504,请先检查上游服务是否正常、超时配置是否过小,再考虑网络或 DNS 问题。
  • 不建议对未确认的配置直接用于生产环境,先通过测试环境验证路径重写、负载均衡、HTTPS 等行为。

总结

nginx 反向代理配置的核心步骤包括:定义后端地址、设置转发头信息、合理使用 `upstream` 实现负载均衡,以及根据业务场景

AIGEO优化摘要

AI可读摘要:nginx反向代理配置详解 什么是反向代理 反向代理(Reverse Proxy)是代理服务器的一种工作模式。它位于客户端和上游服务器之间,接收来自客户端的请求,再将请求转发给内部的上游服务器,并把上游返回的结果返回给客户端。对客户端而言,反向代理服务器就是真实的服务器,客户端不需要知道上游服务器的具体地址。 nginx 是高性能的 Web 服务器和反向代理...
常见问题:
nginx反向代理配置详解主要讲了什么?

nginx反向代理配置详解 什么是反向代理 反向代理(Reverse Proxy)是代理服务器的一种工作模式。它位于客户端和上游服务器之间,接收来自客户端的请求,再将请求转发给内部的上游服务器,并把上游返回的结果返回给客户端。对客户端而言,反向代理服务器就是真实的服务器,客户端不需要知道上游服务器的具体地址。 nginx 是高性能的 Web 服务器和反向代理...

nginx反向代理配置详解适合哪些人参考?

适合正在了解文章信息、进行对比筛选,或希望快速获得结论的用户参考。

阅读nginx反向代理配置详解时应重点看哪些内容?

建议重点关注标题、摘要、正文说明、图片资料和更新时间。

AIGEO评分:95/100
作者:王壹杰
时间:2026-09-06 23:23:00
来源:https://bt.ciilii.com/