nginx负载下,站点通过Request.Url获取到的Url带端口了,请教大牛解决

布谷歌 2016-06-07 04:18:15
如题,网站是运维用nginx在3台服务器的iis上做的负载,对外公布的是域名,如http://notice.shenbianhui.cn。 运维给3个iis里的站点配置的端口是9075,把域名放到nginx的配置文件里。
通过域名访问是正常的,但从记录的日志文件发现,通过Request.Url获取到的Url带端口了,如http://notice.shenbianhui.cn:9075/api/Notification/SmS。

咨询运维为什么会包含这个端口,运维说得改你们的程序,否认nginx配置有问题。 但是,程序是通过Request.Url访问的,没办法改呀。


亲爱的大牛们,谁有遇到类似的问题呀? 是不是得改nginx配置呢?
...全文
2820 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
大鱼> 2019-11-12
  • 打赏
  • 举报
回复
如果配置了端口,使用负载必然待端口的啊
海宏AA 2019-11-12
  • 打赏
  • 举报
回复
同样的问题咨询: 转发别电脑的是没问题的,这样配置的: server { listen 80;  server_name a.b.cn; location / {  proxy_pass http://d.3322.org:88/;  } } 在d.3322.org:88上跑的程序,取 request.url取出来地址就是a.b.cn。 转发到本机81端口的就不行: server { listen 80; server_name localhost; location / { proxy_pass http://localhost:81/; } } 这样转发到81端口,81端口跑的程序,取request.url出来的地址就是http://localhost:81
过了这个村 2019-07-30
  • 打赏
  • 举报
回复
引用 13 楼 小伍 的回复:
[quote=引用 12 楼 weixin_43775033 的回复:] [quote=引用 11 楼 小伍 的回复:] 不是nginx的问题 是asp.net的问题,需要在web.config中配置一个项就完美解决。
兄弟,加什么配置啊?[/quote] 他们回答都不对点,还怪来怪去的。 ====================================== 反向代理后在 asp.net Request.Url.AbsoluteUri 获取不到正确的路径 请求:http://www.abc.cn/a/Index.aspx 结果是: Request.Url.AbsoluteUri:http://www.abc.cn:8011/Index.aspx 解决方案: Nginx增加请求头 proxy_set_header request_url $scheme://$host$request_uri; 后端获取:Request.Headers["request_url"] 终极方案: nginx: 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; web.config 重点是下面的配置 这是困扰我几百年的问题,拿出来分享给大家,给那些遇到同样问题的人 <appSettings> <add key="aspnet:UseHostHeaderForRequestUrl" value="true"/> </appSettings> [/quote] 有用,感谢。
中国稀土 2019-05-31
  • 打赏
  • 举报
回复
引用 13 楼 小伍 的回复:
[quote=引用 12 楼 weixin_43775033 的回复:] [quote=引用 11 楼 小伍 的回复:] 不是nginx的问题 是asp.net的问题,需要在web.config中配置一个项就完美解决。
兄弟,加什么配置啊?[/quote] 他们回答都不对点,还怪来怪去的。 ====================================== 反向代理后在 asp.net Request.Url.AbsoluteUri 获取不到正确的路径 请求:http://www.abc.cn/a/Index.aspx 结果是: Request.Url.AbsoluteUri:http://www.abc.cn:8011/Index.aspx 解决方案: Nginx增加请求头 proxy_set_header request_url $scheme://$host$request_uri; 后端获取:Request.Headers["request_url"] 终极方案: nginx: 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; web.config 重点是下面的配置 这是困扰我几百年的问题,拿出来分享给大家,给那些遇到同样问题的人 <appSettings> <add key="aspnet:UseHostHeaderForRequestUrl" value="true"/> </appSettings> [/quote] 牛逼啊兄弟。webconfig加上配置,表明使用请求头的requesturl,然后nginx加上请求头配置。
中国稀土 2019-04-16
  • 打赏
  • 举报
回复
引用 11 楼 小伍 的回复:
不是nginx的问题 是asp.net的问题,需要在web.config中配置一个项就完美解决。
兄弟,加什么配置啊?
a410787073 2017-03-14
  • 打赏
  • 举报
回复
单站点的时候你默认的80端口,负载后 有80的 有9075的端口 你访问的时候会随机分配地址吧。所以你会获取到9075了
杜一素 2017-03-14
  • 打赏
  • 举报
回复
/** * @SWG\Swagger( * @SWG\Info( * title="", * version="1.0.0" * ), * @SWG\Tag(name="Auth", description="验证模块"), * @SWG\Tag(name="Users", description="账户管理模块"), * schemes={"http"}, * host="192.168.1.107:9090", * basePath="/api" * ) */ 这样指定端口号就行了
xuzuning 2016-06-09
  • 打赏
  • 举报
回复
直观上讲,运维的做法没有错,且简洁有效,是你的要求有些无理了 你的网站由 3 台 IIS 负担,端口号分别是 9075、9076、9077 这样就可轻松的从 nginx 日志中看出均衡的效果 如果都使用相同的端口号,你也只能获得网站总得访问情况
江南小鱼 2016-06-09
  • 打赏
  • 举报
回复
你也讲了iis有好多应用站点,同样nginx负载均衡也不是为你一个站点服务的,指定要区分端口指向咯 域名是不变的,Request.RawUrl,把主机名去掉,你的代码不能使用么?
Poopaye 2016-06-08
  • 打赏
  • 举报
回复
引用 5 楼 gzyes 的回复:
[quote=引用 4 楼 shingoscar 的回复:] https://msdn.microsoft.com/zh-cn/library/system.uri_members%28v=vs.80%29.aspx uri对象本来就包含了端口属性,你写的程序不考虑进去,反而怪配置?
没有怪谁的意思。 是不明白为什么nginx负载下取到的Url带端口。 单点部署时是没有端口的(因为是默认的80,所以没显示)。 你明白我的意思吗?[/quote] 因为80是默认的啊
布谷歌 2016-06-08
  • 打赏
  • 举报
回复
引用 4 楼 shingoscar 的回复:
https://msdn.microsoft.com/zh-cn/library/system.uri_members%28v=vs.80%29.aspx uri对象本来就包含了端口属性,你写的程序不考虑进去,反而怪配置?
没有怪谁的意思。 是不明白为什么nginx负载下取到的Url带端口。 单点部署时是没有端口的(因为是默认的80,所以没显示)。 你明白我的意思吗?
Poopaye 2016-06-07
  • 打赏
  • 举报
回复
https://msdn.microsoft.com/zh-cn/library/system.uri_members%28v=vs.80%29.aspx uri对象本来就包含了端口属性,你写的程序不考虑进去,反而怪配置?
布谷歌 2016-06-07
  • 打赏
  • 举报
回复
回复@Runnerchin @sp1234 , 应用服务器的iis里有好多站点,所以运维给每个站点分配了一个独有的端口。
X-i-n 2016-06-07
  • 打赏
  • 举报
回复
nginx可以更改配置来解决这个问题,但这个问题不是nginx造成的。当前的部署是一种很通行的做法。 取到端口对你的程序有影响吗?如果单看路径,用RawURL也可以呀 如果要改nginx配置的话,可以直接把IIS端口发布到80
  • 打赏
  • 举报
回复
谁让“运维给3个iis里的站点配置的端口是9075”的呢?为什么不是80?先解决这个问题。

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧