我在开发人员框中设置了IIS反向代理,以测试我的应用如何处理通过SSL卸载处理的请求。我的应用程序需要重新创建原始请求,附加一些查询字符串参数,然后将其发送回客户端。默认情况下,IIS / ARR / URL重写似乎没有附加行业标准的“ X-Forwarded-Host”和“ X-Forwarded-Proto”标头。相反,我能找到的最接近的东西是“ X-ARR-SSL”和“ X-Forwarded-For”。我很高兴从“ X-Forwarded-For”解析出原始IP,但是当我查看端口时,似乎没有任何意义。我的SSL反向代理设置为侦听默认的SSL端口(443),但标头中指定的端口为52585。我的问题是,是否有人知道如何确定原始请求的目标端口是什么?我希望我的应用程序能够可靠地处理由IIS代理的请求,但看来我将不得不根据请求是HTTP还是HTTPS来猜测端口。
最佳答案
X-Forwarded-For
与服务器无关。这是客户端的IP地址。它被附加到请求标头,以便Web服务器可以标识真实的客户端,而不是反向代理。您提到的其他标头是事实上的标准,现已被RFC 7239取代。根据RFC,端口号将包含在Forwarded
标头的主机部分中,如下所示:
Forwarded: for=192.0.2.60;proto=http;host=example.com:888;by=203.0.113.43
我怀疑某些反向代理会将端口号作为冒号后面的
X-Forwarded-Host
标头添加,就像在Host
标头中一样,但是由于它不是已定义的标准标头,因此您只需要与您的反向代理一起尝试看看。另请参阅:What is a full specification of X-Forwarded-Proto HTTP header?