示例
server {
listen 8888; # 监听端口
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8088/; # 转发目标
}
location /prod-api {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:9099/; # 转发目标
rewrite ^/prod-api/(.*)$ /$1 break; # url替换
}
error_page 500 502 503 504 /50x.html; # 错误页面拦截,以免输出真实的错误页面
location = /50x.html {
root html;
}
}
内部量含义
$http_host
$http_host
是客户端请求中的 Host 头字段的值。它通常包含客户端请求的域名或 IP 地址以及端口号(如果有)$remote_addr
如果客户端(浏览器)直接访问 Nginx,
remote_addr
就是客户端的真实 IP 地址。
如果客户端通过代理服务器(如 CDN、负载均衡器、反向代理等)访问 Nginx,remote_addr 是代理服务器的 IP 地址,而不是客户端的真实 IP 地址。$proxy_add_x_forwarded_for
proxy_add_x_forwarded_for
是一个用于构建 X-Forwarded-For 头字段的变量。X-Forwarded-For
是一个标准的 HTTP 头字段,用于记录请求经过的代理服务器的 IP 地址链。- 如果请求中没有 X-Forwarded-For 头,proxy_add_x_forwarded_for 的值就是 remote_addr(客户端的 IP 地址)。
- 如果请求中已经有 X-Forwarded-For 头,proxy_add_x_forwarded_for 会在其值后面追加 , $remote_addr。
如果客户端 IP 是 192.168.1.100,且请求中没有 X-Forwarded-For 头,那么 $proxy_add_x_forwarded_for 的值就是 192.168.1.100。
如果客户端 IP 是 192.168.1.100,且请求中已经有 X-Forwarded-For 头值为 203.0.113.195,那么 $proxy_add_x_forwarded_for 的值就是 203.0.113.195, 192.168.1.100。