浏览器直接访问服务器
结果:浏览器访问IP+端口
通过Nginx反向代理,不配置proxy_set_header。
server {
listen 8090;
server_name _;
location / {
proxy_pass http://172.31.5.0:5000;
}
}
结果:proxy_pass+代理端口,即代理IP+代理端口。
设置proxy_set_header Host $host (此时代码中如果有重定向路由,那么重定向时就会丢失端口信息,导致 404)
server {
listen 8090;
server_name _;
location / {
proxy_set_header Host $host;
proxy_pass http://172.31.5.0:5000;
}
}
结果:浏览器访问IP
设置proxy_set_header Host h o s t : host: host:proxy_port
server {
listen 8090;
server_name _;
location / {
proxy_set_header Host $host:$proxy_port;
proxy_pass http://172.31.5.0:5000;
}
}
结果:浏览器访问IP+代理端口
设置proxy_set_header Host $http_host
server {
listen 8090;
server_name _;
location / {
proxy_set_header Host $http_host;
proxy_pass http://172.31.5.0:5000;
}
}
结果:浏览器访问IP+浏览器访问端口
参考:https://www.cnblogs.com/faberbeta/p/nginx008.html
location /mng {
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://mng;
}
可以通过request.getAttribute(“X-Real-IP”)获取客户端真实IP,但当请求通过多个Nginx代理是,$remote_addr 会被覆盖。
解决覆盖方法:使用X-Forwarded-For $proxy_add_x_forwarded_for
location /mng {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://mng;
}
Nginx99----------->Nginx100---------->Nginx101----------->服务器
192.168.179.99->192.168.179.100->192.168.179.101->192.168.179.102
102服务器打印日志格式:
log_format main '$http_x_forwarded_for|$http_x_real_ip|$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
真实数据:
192.168.179.4, 192.168.179.99, 192.168.179.100|-|192.168.179.101 - - [26/Apr/2020:10:57:22 +0800] "GET / HTTP/1.0"
304 0 "-"
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36" "192.168.179.4, 192.168.179.99, 192.168.179.100";
# client, proxy1, proxy2
$http_x_forwarded_for : 192.168.179.4, 192.168.179.99, 192.168.179.100
$http_x_real_ip|$remote_addr : 192.168.179.101
# 客户端用户名称
$remote_user : -
# 访问时间和时区
$time_local : 26/Apr/2020:10:57:22 +0800
# 请求的URI和HTTP协议
$request : GET / HTTP/1.0
# HTTP请求状态
$status : 304
# 发送给客户端文件内容大小
$body_bytes_sent : 0
# 跳转来源
$http_referer : -
# 用户代理:区分设备来源
$http_user_agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36" "192.168.179.4, 192.168.179.99, 192.168.179.100
参考:https:///qq_34556414/article/details/78185057
因篇幅问题不能全部显示,请点此查看更多更全内容