具有 VirtualHost 的 Apache 反向代理不提供页面

具有 VirtualHost 的 Apache 反向代理不提供页面

我设置了一个 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>

相关内容