5月27日 22:11

Nginx 反向代理怎么配置?

Nginx 反向代理怎么配置?

反向代理是 Nginx 最核心的用途之一:客户端请求先到 Nginx,再由 Nginx 转发给后端服务器,客户端感知不到真实后端的存在。和正向代理(代理客户端出国)相反,反向代理代理的是服务端。

最小可用配置

nginx
server { listen 80; server_name example.com; location / { proxy_pass http://192.168.1.100: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_pass 指定后端地址,三条 proxy_set_header 是标配——不带这些头,后端拿到的全是 Nginx 的 IP,日志和鉴权都会出问题。

多后端负载均衡

nginx
upstream backend { server 192.168.1.100:8080 weight=3; server 192.168.1.101:8080 weight=1; server 192.168.1.102:8080 backup; } server { listen 80; location / { proxy_pass http://backend; } }

四种策略选哪个?轮询(默认)无状态通用;ip_hash 保会话粘性但分布不均;least_conn 适合长连接;加权轮询按机器性能分配。生产环境常用加权轮询 + 健康检查。

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; }

不加 Upgrade 头,WebSocket 握手直接失败;proxy_read_timeout 不加长,空闲连接会被 Nginx 主动断开,这是最常见的踩坑点。

面试追问:反向代理和正向代理的区别?

反向代理代理服务端,客户端不知道真实后端是谁;正向代理代理客户端,服务端不知道真实客户端是谁。一句话:正向代理帮客户端藏身份,反向代理帮服务端藏身份。

生产环境别漏这些

  • 超时三件套:proxy_connect_timeoutproxy_send_timeoutproxy_read_timeout,默认 60s,慢接口要调大
  • 缓冲默认开着,大文件上传场景注意 proxy_buffer_sizeproxy_buffers 调大
  • HTTPS 场景在 Nginx 做 SSL 终止,后端走内网 HTTP,证书只管 Nginx 一层
  • proxy_redirect off 防止后端 302 重定向把内网地址暴露给客户端
标签:Nginx