在同一个框上运行Citrix Secure Gateway时,IIS将所有连接视为本地连接

我们将Citrix安全网关安装在Windows Server 2008 R2服务器上,并在同一台服务器上的IIS中托pipeCitrixlogin页面。 CSG在端口80和443上处理传入的HTTP和HTTPS连接,并将它们转发到正在侦听不同端口(仅使用HTTP,而不是HTTPS)的IIS。 这意味着IIS将所有传入连接看作本地连接,源IP地址是服务器自己的IP地址。

这导致了一些问题。 它使得无法在IIS日志中查看源IP地址,并导致IIS向所有客户端(包括外部客户端)显示详细的HTTP错误消息。

我们可以通过closures详细的错误消息来缓解第二个问题,但理想的解决scheme是让IIS看到实际的源IP地址,而不是服务器自己的地址。 这是可能的,如果是这样,怎么样?

假设您至less运行Web Interface 5.x,则可以将其configuration为查看通过网关连接的客户端的真实IP地址 。

$SITEROOT/Citrix/XenApp/app_code/PagesJava/com/citrix/wi/pageutils/Include.javafind以下部分:

 /** * Returns the IP address of the client * * @return the client IP address as a string */ public static String getClientAddress(WIContext wiContext) { String ageClientAddress = AGEUtilities.getAGEClientIPAddress(wiContext); return (ageClientAddress != null ? ageClientAddress : wiContext.getWebAbstraction().getUserHostAddress()); } 

用以下内容replace整个部分:

 /** * Returns the IP address of the client. * * @return the client IP address as a string */ public static String getClientAddress(WIContext wiContext) { WebAbstraction web = wiContext.getWebAbstraction(); String gatewayAddress = "127.0.0.1"; // change as appropriate if Gateway is on another server boolean comingFromGateway = web.getUserHostAddress().equals(gatewayAddress); String forwardedAddress = web.getRequestHeader("X-Forwarded-For"); String ageClientAddress = AGEUtilities.getAGEClientIPAddress(wiContext); if (ageClientAddress != null) { return ageClientAddress; } else if (comingFromGateway && (forwardedAddress != null)) { return forwardedAddress; } else { return web.getUserHostAddress(); } }