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

带ARR的IIS是否支持完全透明的反向代理?,iis,reverse-proxy,arr,transparentproxy,Iis,Reverse Proxy,Arr,Transparentproxy,我有几个web服务器正在运行,我希望所有这些服务器都可以通过一个域访问。我将IIS中的ARR设置为另一台服务器中的反向代理,效果很好。一、 但是,当请求重定向到服务器时,需要保留源ip地址。否则,服务器会看到所有连接都来自localhost,这不是很好 我知道有一个选项forwarded_可为其创建X-forwarded-for标头,但它不是真正透明的,因为我遇到了WAF(Web应用程序防火墙)问题。已编辑: 您需要为您的每个网站制定一个重写规则,这些网站的流量都是从代理服务器定向到它们的。该规

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


我知道有一个选项forwarded_可为其创建X-forwarded-for标头,但它不是真正透明的,因为我遇到了WAF(Web应用程序防火墙)问题。

已编辑

您需要为您的每个网站制定一个重写规则,这些网站的流量都是从代理服务器定向到它们的。该规则将检查
HTTP\u X\u FORWARDED\u FOR
标头是否存在并具有值,如果存在,则我们知道请求已从代理服务器转发,因此我们将服务器变量
REMOTE\u ADDR
设置为
HTTP\u FORWARDED\u 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>

您可以使用ARR Helper在日志中获取实际的客户端IP:


我正在使用上面记录的
REMOTE\u ADDR
服务器变量来测试它,但它并不是一个完全透明的反向代理:我仍然可以将反向代理视为原始IP,将原始代理视为
HTTP\u-FORWARDED\u

我正是在使用上述说明:

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


我有多台服务器。我不想为变量设置变量HTTP_X_FORWARDED_,因为它是非标准的请求头。您希望您的网站能够看到用户的真实IP地址,但不想查看HTTP_FORWARDED_,因此唯一的选择是编写入站重写规则来覆盖远程\u ADDR服务器变量。稍后我会提供一个解决方案。其中缺少的一个重要部分是,您必须将REMOTE_ADDR添加到IIS中允许的服务器变量列表中。否则,在添加重写规则时,将出现服务器500错误。要添加变量,请打开IIS管理器,深入到您的网站,双击URL重写,单击右侧操作区域中的“查看服务器变量…”,然后单击“添加…”。您需要添加每个要设置的变量。感谢您的共享。它可以在IIS 8中运行吗?我找不到任何证据表明它不能运行。