Nginx 如何配置反向代理?
Nginx 反向代理是指 Nginx 服务器接收客户端请求,然后将请求转发到后端服务器,再将后端服务器的响应返回给客户端。客户端只知道 Nginx 服务器的存在,不知道实际处理请求的后端服务器。
基本配置示例:
nginxserver { listen 80; server_name example.com; location / { proxy_pass http://backend_server; 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; } } upstream backend_server { server 192.168.1.100:8080; server 192.168.1.101:8080; }
关键配置指令说明:
-
proxy_pass:指定后端服务器地址,可以是 IP 地址、域名或 upstream 组名
-
proxy_set_header:设置转发给后端服务器的请求头
- Host:保留原始请求的主机名
- X-Real-IP:记录客户端真实 IP
- X-Forwarded-For:记录请求经过的代理链
- X-Forwarded-Proto:记录原始协议(http/https)
-
upstream:定义后端服务器组,实现负载均衡
常用反向代理配置选项:
nginxlocation /api/ { proxy_pass http://backend_api; # 超时设置 proxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s; # 缓冲设置 proxy_buffering on; proxy_buffer_size 4k; proxy_buffers 8 4k; # WebSocket 支持 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # 禁用重定向 proxy_redirect off; }
负载均衡策略:
- 轮询(默认):按顺序分配请求
- least_conn:分配给活动连接数最少的服务器
- ip_hash:根据客户端 IP 进行哈希分配,保证同一 IP 的请求到同一服务器
- least_time:分配给响应时间最短的服务器(需要商业版)
实际应用场景:
- 将请求转发到多个应用服务器
- 隐藏后端服务器真实 IP
- 统一入口,简化客户端配置
- 实现 SSL 终止
- 缓存静态内容
- WebSocket 代理