带ARR的IIS是否支持完全透明的反向代理?

时间:2013-10-16 09:32:10

标签: iis reverse-proxy arr transparentproxy

我运行了一些Web服务器,我希望所有这些服务器都可以通过一个域访问。我在IIS中将ARR设置为另一台服务器中的反向代理,它工作正常。但是,当请求被重定向到服务器时,我需要保留源IP地址。否则,服务器会看到所有来自localhost的连接,这不是很好。

我知道有一个选项forwarded_for可以创建X-Forwarded-For标头,但它实际上并不透明,因为我有WAF(Web应用程序防火墙)问题。

3 个答案:

答案 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:

http://blogs.iis.net/anilr/archive/2009/03/03/client-ip-not-logged-on-content-server-when-using-arr.aspx

答案 2 :(得分:0)

如上所述,我正在使用REMOTE_ADDR服务器变量对此进行测试,但是它不能用作完全透明的反向代理:我仍然可以将反向代理1和HTTP_X_FORWARDED_FOR视为源IP原来的一个。

我正使用上面的说明:

<set name="REMOTE_ADDR" value="{HTTP_X_FORWARDED_FOR}" replace="true" />