簡體   English   中英

Apache + Tomcat:使用mod_proxy而不是AJP

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM