nginx配置反向代理
参考资料
nginx配置反向代理
什么是反向代理
反向代理是 Nginx 最常用的功能之一。简单说,反向代理扮演的是“前台接待”的角色:用户只需要访问 Nginx 的地址,由 Nginx 根据规则把请求转发给后端的实际服务(例如 Tomcat、Node.js、Python 应用等),再把后端返回的内容交给用户。 这样做的好处是:用户不需要知道后端服务的真实地址,我们可以借此实现负载均衡、统一入口、安全隔离和缓存等能力。
一个最基础的配置示例
假设您的后端服务运行在 `127.0.0.1:8080`,希望用户通过访问 `http://your-domain.com` 来获得该服务的内容。那么只需要在 Nginx 配置中增加一个 server 块: nginx server { listen 80; server_name your-domain.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; } } 配置说明:
- `listen 80;`:监听 80 端口,即标准 HTTP 端口。
- `server_name`:指定哪个域名或 IP 的请求会命中该配置。
- `proxy_pass`:核心指令,将请求转发到指定的后端地址。
- 后面的 `proxy_set_header` 用于把客户端的真实信息传递给后端,否则后端只能看到 Nginx 的地址,无法记录访客的真实 IP。
保存配置后,先测试语法再重载: bash nginx -t nginx -s reload 如果您的 Nginx 安装在非标准路径,请使用完整路径,例如 `/usr/local/nginx/sbin/nginx -t`。
按路径代理到不同后端
如果一个域名下需要代理多个服务,可以用 `location` 按路径区分。例如 `/api/` 转发给后端 A,其他路径转发给后端 B: nginx server { listen 80; server_name your-domain.com; location /api/ { proxy_pass http://backend-api:8080; proxy_set_header Host $host; } location / { proxy_pass http://backend-web:3000; proxy_set_header Host $host; } } 这里需要注意:如果 `proxy_pass` 的地址末尾带有 `/`,如 `http://backend-api:8080/`,则会将 `location` 中匹配的部分替换掉;如果不带 `/`,则会将完整 URI 传给后端。例如请求 `/api/user`,上面的配置中后端收到的路径是 `/api/user`;如果写成 `proxy_pass http://backend-api:8080/;`,后端收到的路径会变成 `/user`。请根据后端预期选择。
代理到 HTTPS 后端
如果后端本身是 HTTPS 服务,您只需在 `proxy_pass` 中指定 `https://` 协议: nginx location /secure/ { proxy_pass https://internal-service:8443; proxy_ssl_server_name on; proxy_set_header Host $host; } 如果后端使用自签名证书,您可能还需要关闭证书校验(不建议在生产环境长期使用): nginx location /secure/ { proxy_pass https://internal-service:8443; proxy_ssl_verify off; } 请优先配置正确的 CA 证书链,仅在调试阶段临时关闭校验。
配置代理超时与缓冲区
默认 Nginx 对后端响应的等待时间可能只有 60 秒,如果您的后端处理较慢,需要调整超时时间。同时,合理的缓冲区可以提升传输效率。一套常用的配置如下: nginx location / { proxy_pass http://backend; proxy_connect_timeout 5s; proxy_read_timeout 30s; proxy_send_timeout 30s; proxy_buffer_size 4k; proxy_buffers 8 4k; proxy_busy_buffers_size 8k; } 参数含义:
- `proxy_connect_timeout`:与后端建立连接的超时时间,通常建议 3~10 秒。
- `proxy_read_timeout`:两次读取之间的超时,不是整个响应的总时长,建议根据业务调整。
- `proxy_buffer_size`:保存后端响应头部的缓冲区大小。
- `proxy_buffers`:响应体缓冲区的数量和大小。
如果后端是下载大文件或流媒体服务,请适当调大缓冲区,或设置 `proxy_buffering off;` 来关闭缓冲以便实时转发。
反向代理配合 WebSocket
对于需要长连接的 WebSocket 服务(例如聊天室、实时推送),需要额外设置升级请求头: nginx location /ws/ { proxy_pass http://websocket-backend:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_read_timeout 3600s; } 其中 `proxy_http_version 1.1` 必不可少,同时要显式传递 `Upgrade` 和 `Connection` 头,否则 Nginx 会丢弃这些头,导致 WebSocket 握手失败。`proxy_read_timeout` 建议设置较长,避免空闲连接被切断。
安全方面的细节提醒
- 隐藏后端错误信息:默认情况下 Nginx 会显示版本号,建议在 `http` 块中加入 `server_tokens off;`。
- 限制请求来源:如果需要仅允许特定 IP 访问某个代理路径,可以配合 `allow` 和 `deny`:
nginx location /admin/ { allow 192.168.1.0/24; deny all; proxy_pass http://admin-backend:8080; }
- 传输层安全:生产环境建议配置 HTTPS,使用 Let's Encrypt 或企业证书,不要仅使用 HTTP 明文转发。
- 注意日志脱敏:如果代理路径中可能携带 token 或敏感参数,建议自定义日志格式,避免记录完整 URI。
验证与排错
每次修改配置后,执行以下命令确认无误: bash nginx -t nginx -s reload 如果出现 `host not found in upstream` 错误,请检查 `proxy_pass` 后端的域名或 IP 是否可解析。 如果转发后页面显示 502,表示 Nginx 无法连接到后端服务,请使用 `curl http://127.0.0.1:8080` 确认后端是否正常;如果是 504,则说明后端响应超时,检查超时配置或后端负载。 您还可以使用 `nginx -T`(大写的 T)输出完整配置,帮助检查是否有多处冲突。
注意事项总结
- 修改配置后务必执行 `nginx -t`,测试通过后再 `reload`,避免语法错误导致 Nginx 无法启动。
- 如果生产环境正在运行多个 Nginx 实例或使用了配置管理工具(如 Ansible、Kubernetes),请在变更前做好备份。
- 负载均衡场景下,请在 `proxy_pass` 前定义 `upstream` 组,例如:
nginx upstream backend_servers { server 192.168.1.11:8080; server 192.168.1.12:8080; } server { listen 80; location / { proxy_pass http://backend_servers; } } 这是反向代理结合负载均衡的常见做法。
- 回滚方式:将原有配置文件备份为 `.bak`,出现问题时只需把备份文件恢复并重新 `nginx -s reload`。
以上配置覆盖了最常见的反向代理场景。根据您的实际业务需求,可以在 `location` 中增加更多指令,例如缓存、压缩等。如有进一步需求,随时告诉我。
AIGEO优化摘要
nginx配置反向代理主要讲了什么?
什么是反向代理 反向代理是 Nginx 最常用的功能之一。简单说,反向代理扮演的是“前台接待”的角色:用户只需要访问 Nginx 的地址,由 Nginx 根据规则把请求转发给后端的实际服务(例如 Tomcat、Node.js、Python 应用等),再把后端返回的内容交给用户。 这样做的好处是:用户不需要知道后端服务的真实地址,我们可以借此实现负载均衡、统一...
nginx配置反向代理适合哪些人参考?
适合正在了解文章信息、进行对比筛选,或希望快速获得结论的用户参考。
阅读nginx配置反向代理时应重点看哪些内容?
建议重点关注标题、摘要、正文说明、图片资料和更新时间。
时间:2026-09-09 11:28:57
来源:https://bt.ciilii.com/

