我设置了一个 Apache 反向代理来将请求移至 Tomcat Applet。配置类似于:
<VirtualHost 100.100.100.100:80>
ProxyPass /AppName/App http://1.1.1.1/AppName/App
ProxyPassReverse /AppName/App http://1.1.1.1/AppName/App
</VirtualHost>
我还有一个名为的页面summary.html
,其存在方式1.1.1.1
为:
http://1.1.1.1/AppName/summary.html
当我直接浏览时,我可以毫无问题地查看它,但是如果我尝试通过反向代理访问它,我得到的是一个空白页。Wireshark 显示 503,但这个错误来自 Apache 反向代理 (IP 100.100.100.100),而不是 Tomcat (IP 1.1.1.1)。
我应该添加http://1.1.1.1/AppName/
到配置中吗?怎么添加?我试过了,但得到的是空白页,然而这个在浏览器的 URL 栏上显示了 Tomcat 的内部 IP,所以不行。
非常感谢您的帮助。
谢谢。
编辑:这是来自 Wireshark 的转储:
GET /AppName/ HTTP/1.1
Host: 100.100.100.100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.52.7 (KHTML, like Gecko) Version/5.1.2 Safari/534.52.7
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Cache-Control: max-age=0
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: keep-alive
HTTP/1.1 404 Not Found
Date: Tue, 30 Jan 2012 09:08:51 GMT
Server: Apache
Content-Length: 1
Connection: close
Content-Type: text/html; charset=iso-8859-1
答案1
我怀疑你忘记了“ProxyPreserveHost On”。
如果没有此指令,您的应用程序将与 HTTP“Host:1.1.1.1”标头联系,而当您直接浏览时,它会看到“Host:the.domain.com”。
答案2
像这样添加它就可以了:
<VirtualHost 100.100.100.100:80>
ProxyPass /AppName/ http://1.1.1.1/AppName/
ProxyPassReverse /AppName/ http://1.1.1.1/AppName/
</VirtualHost>
甚至:
<VirtualHost 100.100.100.100:80>
ProxyPass /AppName/summary.html http://1.1.1.1/AppName/summary.html
ProxyPassReverse /AppName/summary.html http://1.1.1.1/AppName/summary.html
ProxyPass /AppName/App http://1.1.1.1/AppName/App
ProxyPassReverse /AppName/App http://1.1.1.1/AppName/App
</VirtualHost>
您能否解释一下当您有这样的配置时会出现什么问题?我不太清楚您所说的“这个在浏览器的 URL 栏上显示 Tomcat 的内部 IP”是什么意思。
答案3
我会使用重写规则。
http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewriterule
尝试:
<VirtualHost 100.100.100.100:80>
RewriteRule ^/AppName/(.*) http://1.1.1.1/AppName$1 [P]
</VirtualHost>