【问题标题】:How to redirect Apache 2.2 on Windows to Tomcat (same machine)如何将 Windows 上的 Apache 2.2 重定向到 Tomcat(同一台机器)
【发布时间】: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>

但页面仍然无法正确显示。

感谢您的意见。

【问题讨论】:

    标签: apache tomcat


    【解决方案1】:

    这是我自己想出来的。解决方案是在 ProxyPass 行的地址末尾添加 /。

    据我了解,服务器正试图按字面意思解析地址,因此当它检查(例如,位于 webapps 文件夹中的文档页面)时,它会返回一个代理错误,说明它不能解决http://localhost:8080docs

    【讨论】:

      猜你喜欢
      • 2013-11-15
      • 2016-12-30
      • 1970-01-01
      • 2018-12-15
      • 1970-01-01
      • 2010-10-10
      • 2020-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多