我花了很多时间试图找出一些显而易见的东西,但是我对Apache / Tomcat缺乏了解并不能让我这么容易 .
我被要求将端口80(Apache)上的请求重定向到端口8080(Tomcat ..当它可以工作时,到应用程序) .
在我更改任何内容之前,localhost:80将显示“It works”和locahost:8080 Apache欢迎页面 .
我做了以下更改:
-
从httpd.conf文件中取消注释LoadModule proxy_module modules / mod_proxy.so和LoadModule proxy_http_module modules / mod_proxy_http.so
-
取消注释包含conf / extra / httpd-vhosts.conf,始终在httpd.conf中
在httpd-vhosts.conf中,我添加了:
<VirtualHost *:80> ServerName localhost ProxyRequests Off ProxyPreserveHost On ProxyPass / http://localhost:8080 ProxyPassReverse / http://localhost:8080 </VirtualHost>
但是当我尝试http://localhost时,我确实到达Apache欢迎页面,但所有css样式,图像都丢失了:
我知道为什么它不起作用:当我检查我的页面,然后查看 Headers 时,我看到指向favicon的链接例如是http://mydomain/myApp/images/favicon.ico,但如果我复制粘贴该链接,我当然不会找到该图标因为它不在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>
但页面仍然无法正确显示 .
谢谢您的意见 .
1 回答
我自己想出了这个 . 解决方案是在ProxyPass行中的地址末尾添加一个/ .
据我所知,服务器试图按字面意思解析地址,所以当它检查时,比如webapps文件夹中的文档页面,它会返回一个代理错误,表明它无法解析http://localhost:8080docs .