Tomcat

mod_proxy tomcat

  • October 21, 2009

我在幾個地方問過這個問題,但沒有找到答案。這應該很簡單,也是一個很常見的問題。不幸的是,我對 tomcat 和 mod_proxy 一無所知,所以我無法弄清楚。

我有一些在 tomcat 中執行的應用程序,作為戰爭安裝,我可以在以下位置訪問它們 myserver.com:8080/myapp

我只是想創建一個使用 mod_proxy將myapp.myserver.com轉發到這個myserver.com:8080/myapp的 apache vhost。

Hudson 就是一個完美的例子,沒有額外的配置,只是一場部署戰爭。所以我設置了以下apache vhost:

<VirtualHost *:80>
 ServerName hudson.myserver.ca

 ProxyPreserveHost On
 ProxyPass / http://localhost:8080/hudson
 ProxyPassReverse / http://localhost:8080/hudson

</VirtualHost>

我的 proxy.conf 是:

<IfModule mod_proxy.c>
 ProxyRequests Off

 <Proxy *>
   AddDefaultCharset off
   Order deny,allow
   Allow from all
 </Proxy>

 # Enable/disable the handling of HTTP/1.1 "Via:" headers.
 # ("Full" adds the server version; "Block" removes all outgoing Via: headers)
 # Set to one of: Off | On | Full | Block

 ProxyVia On
</IfModule>

每個應用程序上的每個請求都具有相同的行為。例如,我去 hudson.myserver.ca,它出於某種原因轉發到 hudson.myserver.ca/hudson,它給出了一個 tomcat 404,上面寫著

The requested resource (/hudsonhudson/) is not available.

發生在 hudson、jira、confluence 和任何其他應用程序上。

額外的“哈德森”是怎麼回事,為什麼這不起作用?

您的代理配置應為:

ProxyPass / http://localhost:8080/hudson/
ProxyPassReverse / http://localhost:8080/hudson/

然後,您需要首先找出導致302重定向的原因。其他地方可能有導致它的重寫規則。

另一方面,您可能需要考慮使用mod_proxy_ajp代替 Tomcat 連接,因為這就是它的用途。

引用自:https://serverfault.com/questions/76539