nginx配置反向代理
参考资料
nginx配置反向代理
nginx配置反向代理
什么是反向代理
反向代理(Reverse Proxy)是服务器前的一道“中转站”。客户端请求先到达 Nginx,再由 Nginx 根据规则将请求转发给后端的应用服务器(如 Tomcat、Node.js、Python 等),并将响应返回给客户端。对企业网站而言,反向代理能隐藏真实后端地址、实现负载均衡、统一 HTTPS 证书管理,并提升整体安全性。
前置条件
在开始配置前,请确认:
- 已安装 Nginx(推荐使用官方源或发行版仓库安装的稳定版)
- 拥有服务器 root 或 sudo 权限
- 已准备好后端服务地址(如 `http://127.0.0.1:8080`)
- 已解析域名到当前服务器(如需通过域名访问)
基础反向代理配置
以下是一个最小可用的反向代理示例,将来自 `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`:后端服务地址,支持 IP、域名和 Unix 套接字。
- `proxy_set_header`:将必要的请求头传递给后端,保证应用能获取客户端真实 IP 和原始协议。
- `location /`:匹配所有路径,可根据需要更改为 `/api`、`/admin` 等更具体的路径。
路径与动静分离场景
当后端 API 与静态资源需要分开处理时,可配置多个 `location`。以下配置将 `/api` 请求转发至后端服务,而静态文件直接由 Nginx 处理: nginx server { listen 80; server_name example.com;
后端动态请求
location /api/ { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }
静态资源
location /static/ { alias /var/www/example/static/; expires 7d; access_log off; }
其他请求
location / { proxy_pass http://127.0.0.1:8080; } } 注意事项:使用 `alias` 时需确保路径以 `/` 结尾,且目录权限正确。若希望 Nginx 直接返回固定页面,可使用 `return 403;` 或 `try_files` 配合错误页。
WebSocket 反向代理
若后端提供 WebSocket 服务(如在线聊天、实时推送),需要在 Nginx 中显式升级协议,否则连接会中断。配置示例: nginx server { listen 80; server_name ws.example.com; location / { proxy_pass http://127.0.0.1:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_read_timeout 3600s; proxy_send_timeout 3600s; } } 其中 `proxy_read_timeout` 建议根据业务心跳间隔调整,避免空闲连接被过早关闭。
HTTPS 反向代理
为保障数据传输安全,强烈建议启用 HTTPS。使用 Certbot 获取免费证书是最简单的方式: bash sudo certbot --nginx -d example.com 该命令会自动修改 Nginx 配置并启用 HTTP/2。手动配置 HTTPS 时,参考以下结构: nginx server { listen 443 ssl http2; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; 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-Proto $scheme; } } server { listen 80; server_name example.com; return 301 https://$host$request_uri; }
负载均衡配置
当后端有多台服务器时,可在 `upstream` 块中定义服务器组,并让 `proxy_pass` 指向该组。Nginx 默认采用轮询算法,也支持 `least_conn`、`ip_hash` 等策略。 nginx upstream backend { server 192.0.2.10:8080 weight=3; server 192.0.2.11:8080 weight=1; server 192.0.2.12:8080 backup; keepalive 32; } server { listen 80; server_name example.com; location / { proxy_pass http://backend; proxy_set_header Host $host; } }
- `weight` 表示权重,权重越高分配更多请求。
- `backup` 标记备用服务器,正常时只处理主服务器出现故障后的请求。
- `keepalive` 开启后端连接复用,减少握手开销,提升性能。
通用安全建议
- 仅允许必要的 HTTP 方法,可在 `location` 中限制 `limit_except GET POST { deny all; }`
- 为后端接口配置访问控制(IP 白名单或 Basic Auth)
- 隐藏 Nginx 版本号:在 `http` 块中添加 `server_tokens off;`
- 对敏感响应头(如 `X-Powered-By`)进行清理
- 日志中避免记录明文令牌或密码,必要时可对 `$request_uri` 做脱敏处理
验证与生效
修改任何 Nginx 配置后,务必先测试配置语法是否正确,再平滑重载服务: bash nginx -t nginx -s reload `nginx -t` 会输出 `syntax is ok` 和 `test is successful`。若提示错误,请根据输出检查具体行。重载不会中断现有连接,是安全可靠的生效方式。
常见排错思路
- 出现 `502 Bad Gateway`:检查后端服务是否启动、监听地址是否与 `proxy_pass` 一致,以及防火墙是否放行。
- 出现 `404 Not Found`:检查 `location` 前缀和 `proxy_pass` 的路径拼接规则。
- 页面能打开但无样式:确认静态资源路径是否正确,或 `location` 顺序是否被误匹配。
- 登录后跳转异常:在 `location` 中检查是否遗漏了 `proxy_set_header Host $host;`,后端重定向可能依赖该字段。
总结
Nginx 反向代理配置的核心在于理解 `proxy_pass` 的行为、`location` 的匹配顺序以及请求头传递规则。建议先在测试环境验证完整流程,再部署到生产。以上配置示例均可直接复制修改使用,如需特定业务场景(如按 URL 参数分流、灰度发布)的详细配置,可进一步咨询技术团队。如有进一步需求,随时告诉我。
AIGEO优化摘要
nginx配置反向代理主要讲了什么?
nginx配置反向代理 什么是反向代理 反向代理(Reverse Proxy)是服务器前的一道“中转站”。客户端请求先到达 Nginx,再由 Nginx 根据规则将请求转发给后端的应用服务器(如 Tomcat、Node.js、Python 等),并将响应返回给客户端。对企业网站而言,反向代理能隐藏真实后端地址、实现负载均衡、统一 HTTPS 证书管理,并提升...
nginx配置反向代理适合哪些人参考?
适合正在了解文章信息、进行对比筛选,或希望快速获得结论的用户参考。
阅读nginx配置反向代理时应重点看哪些内容?
建议重点关注标题、摘要、正文说明、图片资料和更新时间。
时间:2026-09-08 21:02:56
来源:https://bt.ciilii.com/

