我运行了一些Web服务器,我希望所有这些服务器都可以通过一个域访问。我在IIS中将ARR设置为另一台服务器中的反向代理,它工作正常。但是,当请求被重定向到服务器时,我需要保留源IP地址。否则,服务器会看到所有来自localhost的连接,这不是很好。
我知道有一个选项forwarded_for可以创建X-Forwarded-For标头,但它实际上并不透明,因为我有WAF(Web应用程序防火墙)问题。
答案 0 :(得分:6)
<强>被修改强>:
您需要为每个从代理服务器向其发送流量的网站重写规则。规则将检查HTTP_X_FORWARDED_FOR
标头是否存在且是否有值,如果存在,则我们知道请求已从代理服务器转发,因此我们将服务器变量REMOTE_ADDR
设置为HTTP_X_FORWARDED_FOR
的值,因为我们知道这是用户的真实IP地址。
以下是规则:
<rule name="RewriteRemoteAddr">
<match url="(.*)" />
<conditions>
<add input="{HTTP_X_FORWARDED_FOR}" pattern="([_0-9a-zA-Z]+)" />
</conditions>
<serverVariables>
<set name="{REMOTE_ADDR}" value="{HTTP_X_FORWARDED_FOR}" />
</serverVariables>
<action type="None" />
</rule>
答案 1 :(得分:0)
您可以使用 ARR Helper 在日志中获取实际的客户端IP:
答案 2 :(得分:0)
如上所述,我正在使用REMOTE_ADDR
服务器变量对此进行测试,但是它不能用作完全透明的反向代理:我仍然可以将反向代理1和HTTP_X_FORWARDED_FOR
视为源IP原来的一个。
我正使用上面的说明:
<set name="REMOTE_ADDR" value="{HTTP_X_FORWARDED_FOR}" replace="true" />