[英]Apache + Tomcat: Using mod_proxy instead of AJP
有沒有辦法使用HTTP代理將Apache連接到Tomcat,以便Tomcat獲取正確的傳入主機名而不是localhost? 我在apache中使用此指令:
ProxyPass /path http://localhost:8080/path
但它來自localhost,當我們在同一台服務器上有一堆站點時,這是無用的。 我可以在服務器配置中手動設置主機:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
proxyName="pretend.host" proxyPort="80" />
但這再次不會提供多個站點。 而且我不喜歡為每個站點使用不同的內部端口,聽起來真的很難看。
我代理它時是否無法轉移端口?
(如果你問為什么我不只是使用AJP,答案就是這個錯誤 。我在嘗試完全放棄Tomcat和Apache之前我正在盡我所能)
您正在尋找的設置是:
<VirtualHost *:80>
ServerName public.server.name
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>
請注意,我們使用localhost作為代理目標。 我們可以這樣做,因為我們啟用了ProxyPreserveHost 。 文件說明了這一點
它主要用於特殊配置,如基於代理質量名稱的虛擬主機,其中原始主機頭需要由后端服務器進行評估。
這聽起來和你正在做的完全一樣。
我認為,如果您想在同一台服務器上使用多個站點,最好的辦法就是在Apache配置中使用虛擬主機。 這是一個例子:
<VirtualHost *:80>
ServerName server.domain.com
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://server.domain.com:8080/
ProxyPassReverse / http://server.domain.com:8080/
<Location />
Order allow,deny
Allow from all
</Location>
只要在外部DNS中注冊了server.domain.com,傳入的主機名就會顯示在客戶端URL中。 我正在運行一個托管6個獨立站點的服務器,其中包括3個由Tomcat使用此方法返回的站點。
您仍然可以使用AJP,因為它比HTTP更快。 只需確保在http.conf中啟用它:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
在這種情況下,此配置適用於我:
<VirtualHost *:80>
ServerName public.server.name
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / ajp://localhost:8080/
# ProxyPassReverse might not be needed,
# it's only for redirecting from inside.
# ProxyPassReverse / ajp://localhost:8080/
</VirtualHost>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.