我们有一个Apache Web服务器(作为代理服务器)位于几台运行不同应用程序的服务器之前:IIS,Tomcat,jBoss等。Apache服务器充当我们单个静态外部IP地址的代理。 我们有多个指向单个IP地址的域名,而Apache则将请求重新路由/代理到正确的服务器。
一个问题是,当代理到IIS6实例时,请求路由是正确的,但是当用户input域名example.com/home时,他们的地址栏会变为192.168.10.30/home或任何内部IP地址服务器是。 哎哟。
另一个问题是,当从同一个IIS6实例中加载页面时,我们遇到了页面上的一些内容加载但不是全部的问题。 有些图片会“丢失”,有些javascript无法加载等等
注意:我不是在指责IIS6,但它是我们遇到的问题中唯一的盒子。
这里是我正在使用的Apache中的VirtualHost条目。 我是否缺lessconfiguration的东西?
<VirtualHost *:80> ServerName example.com ServerAlias www.example.com ProxyPass / http://192.168.10.50/ ProxyPassReverse / http://192.168.10.50/ ProxyPreserveHost On </VirtualHost>
这里是有些请求出现的502代理错误(可能是任何随机请求 – CSS,JS,HTML等):
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>502 Proxy Error</title> </head><body> <h1>Proxy Error</h1> <p>The proxy server received an invalid response from an upstream server.<br /> The proxy server could not handle the request <em><a href="/public/example/js/jquery-1.3.2.min.js">GET /public/example/js/jquery-1.3.2.min.js</a></em>.<p> Reason: <strong>Error reading from remote server</strong></p></p> </body></html>
检查ProxyPreserveHost指令
IIS本身不会导致redirect,除非它专门设置为这样做。 这很可能是代码做redirect的东西,或者是你的Apache反向代理的规则造成的。
缩小范围的一个好方法是在IIS上对本地进行testing,看看是否redirect。 (尽pipetesting可能会受到污染,因为您将使用不同的IP进行testing)。 如果它在那里redirect,那么你知道来源,否则它在代理级别。