IIS自动重定向导致NetScaler SSL Offload错误

今天在测试NetScaler的SSL Offload的时候,发现有些页面需要修改后台服务器的配置才能实现和NetScaler的完美兼容。

NetScaler SSL Offload 的原理很简单,就是位于客户端和服务器之间的透明代理,处理两者之间的TCP流量。

NS加密与客户端之间的通信,解密后转发到后台服务器,来实现透明代理,对于其他TCP通信流量来说还好,但是对于HTTP协议的处理,可能会由于HTTP的一些特性,导致这种流量的失密和服务无法访问,因为SSL Offload只能加密与客户单的HTTP请求,但是如果URI指向的地址是HTTP,而不是页面请求时候的HTTPS,那么将导致这些资源无法走HTTPS协议,一种导致无法访问该资源,另外一种,将导致这些资源暴漏在非加密状态。

所以对于这种网站,需要再开发的时候就在页面中使用相对路径,而不能使用硬编码地址,否则在使用SSL Offload的时候,比较麻烦。(使用硬编码可以使用NS来重定向和修改,但是所有流量都需要分析,无疑会加重NS的负载和效率,所以不推荐。)

上面我提到,使用相对路径能解决由页面内资源(URI/URL)导致的无法访问 ,但是在使用相对路径的时候,还是可能会有问题。今天在使用WebInterface5.4站点作为后台站点 来测试SSL Offload的时候,发现了这样的问题:

在 IE地址栏输入https://www.xenme.com以后,会自动跳转到citrix/desktopweb(注意,这个地址后面没有斜杠,而且协议是http,而不是https)后,显示该页面无法访问,手动在最后补全斜杠后,页面访问正常。

在上图中我们可以看到页面在跳转到https://xenme.com/citrix/desktopweb/的时候出错了。

这个出错的原因就是因为在最开始跳转到图中2标示的时候,IIS检测到结尾没有斜杠(/),IIS会自动发送301状态到客户端,并指定浏览器需要跳转到图中2.2标示的地址,从而导致客户端直接访问了基于http协议的页面地址,NetScaler肯定不会响应页面,所以导致了客户端显示无法访问。

很明显,NetScaler是直接转发了该重定向页面的header到客户端,导致无法正常跳转过去。

解决方法很简单,直接修改WebInterface页面来直接跳转到citrix/desktopweb/目录,而不是citrix/desktopweb,然后由IIS用重定向来实现跳转。

上面的方法对WebInterface来说足够了,但是如果是一个非常大的站点来说,要修改所有的重定向规则,是很复杂的,NetScaler支持URL的Rewrite功能,可以用来对这些URI资源进行重定向和修改来实现该功能,总得来说,Rewrite是个非常强大的功能,但是在大流量情况下,同时进行Rewrite和SSL Offload的压力就可想而知了。