IIS 在 x-Forwarded-For header 中设置的端口号与 originally-targeted 端口不同

Port number being set by IIS in the x-Forwarded-For header is different than the originally-targeted port

我在我的开发箱上设置了一个 IIS reverse-proxy 来测试我的应用程序如何处理通过 SSL 卸载的请求。
我的应用程序需要重新创建原始请求,附加一些查询字符串参数,然后将其发送回客户端。默认情况下,IIS/ARR/URL-rewrite 似乎没有附加行业标准 "X-Forwarded-Host" 和 "X-Forwarded-Proto" header。相反,我能找到的最接近的东西是 "X-ARR-SSL" 和 "X-Forwarded-For"。
很高兴从"X-Forwarded-For"中解析出原来的IP,但是看端口的时候好像没有什么意义。我的 SSL reverse-proxy 设置为侦听默认 SSL 端口 (443),但 header 中指定的端口是 52585。
我的问题是有谁知道如何弄清楚原始请求的目标端口是什么?我希望我的应用程序能够稳健地处理由 IIS 代理的请求,但看起来我将不得不根据请求是 HTTP 还是 HTTPS 来猜测端口。

X-Forwarded-For has nothing to do with the server. It's the IP address of the client. It's appended to the request headers so that the web server can identify the real client instead of the reverse proxy. The other headers you mention were de-facto standards which have now been superceded by RFC 7239。根据 RFC,端口号将包含在 Forwarded header 的主机部分,如下所示:

Forwarded: for=192.0.2.60;proto=http;host=example.com:888;by=203.0.113.43

我怀疑 一些 反向代理将端口号添加为 X-Forwarded-Host header 的一部分,在冒号之后,就像它在Host header,但由于它不是已定义的标准 header,您只需使用反向代理尝试一下即可。

另请参阅:What is a full specification of X-Forwarded-Proto HTTP header?