遇到的问题
因为当用户无法直接访问我们的服务器与服务时,我们需要一个开放域名或IP地址,映射到我们的Nginx,并且端口不统一,开发地址为8989,我们的nginx为80,当我们的服务要进行重定向时,nginx默认获取的是自己的监听接口,也就是80端口,所以导致用户访问重定向的地址时报404错误,所以我们需要的时用户浏览器地址栏输入的域名或ip+端口(用户能真正访问到地址),所以经过自己研究与测试,得到以下的解决方案。
解决方案
Nginx的
server或者localhost
中加入
proxy_set_header Host $http_host
,用户浏览器地址栏输入的域名或ip+端口进行重定向
location /spring-boot {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host; #这样配置会根据用户浏览器地址栏输入的域名或ip+端口进行重定向
# proxy_redirect off;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Client-IP $remote_addr;
proxy_set_header X-Forwarded-Port $server_port;
# 加websocket头部识别
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_connect_timeout 60;
proxy_read_timeout 600;
proxy_pass http://127.0.0.1:8080;
}
参数:
$http_host
#请求地址,即浏览器中你输入的地址(IP或域名)
;
可以参考往期的
Nginx的参数大全
结果
重定向后,Response Header中,Location返回值的地址将会是用户浏览器地址栏输入的域名或ip+端口
扩展
#$http_host #请求地址,即浏览器中你输入的地址(IP或域名)
proxy_set_header Host $http_host; #这样配置会根据用户浏览器地址栏输入的域名或ip+端口进行重定向
#$server_port #服务器端口(Nginx监听的端口)
proxy_set_header Host $server_port; #这样配置会根据Nginx监听的端口进行重定向
#$proxy_port #服务器真正访问的端口(你的应用部署在服务器上的端口)
proxy_set_header Host $proxy_port ; #这样配置会根据被代理服务的端口进行重定向,例如以上例子的8080
版权声明:本文为qq_26323419原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。