Nginx:重定向时404错误,重定向地址端口与期望地址的端口不一致

  • Post author:
  • Post category:其他




遇到的问题

因为当用户无法直接访问我们的服务器与服务时,我们需要一个开放域名或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 版权协议,转载请附上原文出处链接和本声明。