我花了很多时间试图找出一些显而易见的东西,但我在Apache / Tomcat中缺乏知识并不能让我这么容易。
我被要求将端口80(Apache)上的请求重定向到端口8080(Tomcat ..当它可以工作时,到应用程序)。
在我改变任何东西之前,localhost:80会显示"它可以正常运行"和locahost:8080 Apache欢迎页面。
我做了以下更改:
在httpd-vhosts.conf中,我添加了:
<VirtualHost *:80>
ServerName localhost
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://localhost:8080
ProxyPassReverse / http://localhost:8080
</VirtualHost>
但是当我尝试http://localhost时,我确实到达了Apache欢迎页面,但所有css样式,图像都丢失了:
我知道它为什么不起作用:当我检查我的页面,并查看标题时,我看到指向favicon的链接例如http://mydomain/myApp/images/favicon.ico,但如果我复制粘贴该链接,我当然不会找到favicon,因为它不在Apache上,而是Tomcat(如果这有意义的话)。如果我将端口添加到URL,则它可以正常工作:http://mydomain:8080/myApp/images/favicon.ico
这与此处所述的问题有关:https://serverfault.com/questions/561892/how-to-handle-relative-urls-correctly-with-a-reverse-proxy?
这是因为tomcat响应头将包含代理头(即Location头是http://localhost/WebApp而不是http://localhost:8080/WebApp)因为ProxyPreserveHost已打开
所以我将其切换为关闭:
<VirtualHost *:80>
ServerName localhost
ProxyRequests Off
ProxyPreserveHost Off
ProxyPass / http://localhost:8080
ProxyPassReverse / http://localhost:8080
</VirtualHost>
但页面仍然无法正确显示。
感谢您的投入。
答案 0 :(得分:0)
我自己想出了这个。解决方案是在ProxyPass行中的地址末尾添加一个/。
据我所知,服务器正试图按字面意思解析地址,所以当它检查时,比如webs文件夹中的文档页面,它会返回一个代理错误,表示它不能解决http://localhost:8080docs。