新项目上线,由原来的单机版改为了分布式布署,测试中发现程序中获取的url均有后端节点的端口,这很显然是不对的。
https://www.baidi.com:8001/reg.aspx?id=112112
#正确的应为:
https://www.baidi.com/reg.aspx?id=112112
反向代理中在配置时是有向后端传递host值,只不过开发人员在取值时使用的是request.url
在ASP.NET中可以在web.config配置文件appsettings中添加一项配置。
<add key="aspnet:UseHostHeaderForRequestUrl" value="true"/>
在webconfig加上配置后,表明使用请求头的requesturl,但前提是前端代理要向代端传递值才能取到。
另一种解决办法可以在开发时改变一下取值方法,从请求头中取值也是可以的。
proxy_set_header request_url $scheme://$host$request_uri;
Request.Headers["request_url"]
完整示例:
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
<appSettings>
<add key="aspnet:UseHostHeaderForRequestUrl" value="true"/>
</appSettings>