【发布时间】:2017-10-25 06:32:40
【问题描述】:
我花了相当长的时间试图找出一些看似微不足道的东西,但我对 Apache/Tomcat 缺乏了解并没有让这对我来说很容易。
我被要求将来自端口 80 (Apache) 的请求重定向到端口 8080(Tomcat.. 以及何时可以工作,到应用程序)。
在我更改任何内容之前,localhost:80 会显示“It works”,而 localhost: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 样式、图像都丢失了:
我知道它为什么不起作用:当我检查我的页面并查看标题时,我看到指向网站图标的链接例如是 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?
这是因为 ProxyPreserveHost 已打开,因此 tomcat 响应标头将包含代理标头(即 Location 标头是 http://localhost/WebApp 而不是 http://localhost:8080/WebApp)
所以我把它关掉了:
<VirtualHost *:80>
ServerName localhost
ProxyRequests Off
ProxyPreserveHost Off
ProxyPass / http://localhost:8080
ProxyPassReverse / http://localhost:8080
</VirtualHost>
但页面仍然无法正确显示。
感谢您的意见。
【问题讨论】: