httpd 設定代理大多數 tomcat 請求時出現問題

httpd 設定代理大多數 tomcat 請求時出現問題

我在 Apache 中進行以下工作時遇到了一些困難:

我們有一個 apache/tomcat 實例位於 AWS ELB 後面。 ELB 正在執行 SSL 終止,因此我們在伺服器上有一個重定向來處理此問題。

我需要/health透過 http 進行存取才能使 ELB 運作狀況檢查正常運作。

我需要將所有不是tomcat/或tomcat 的內容發送到.theme/foolocalhost:8080/foo

我已經使用 mod_proxy 和/或 mod_rewrite 嘗試了以下配置的一些變體,但我似乎無法使其正常工作,因此將不勝感激。

<Location /health>
  ProxyPass http://localhost:8080/health ttl=1
  ProxyPassReverse http://localhost:8080/health
</Location>

<Location ~ "^/(.+)">
  RewriteEngine On
  RewriteCond %{HTTP:X-Forwarded-Proto} =https
  RewriteCond %{REQUEST_URI} !^/(health|theme)/
  RewriteRule . http://localhost:8080/$1 [P]
  ProxyPassReverse http://localhost:8080/$1
</Location>

<Location />
   RewriteEngine On
   RewriteCond %{REQUEST_URI} !^/health
   RewriteCond %{HTTP:X-Forwarded-Proto} =http
   RewriteRule . https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]
</Location>

Tomcat 正在使用純 http 偵聽連接埠 8080。

答案1

我讓Tomcat 在連接埠8009 上偵聽ajp。虛擬主機主機定義。然後,反向代理規則決定將哪些請求轉送到各種其他主機(遠端或其他本機虛擬主機)、從 DocumentRoot 提供內容或透過 ajp 轉送到 Tomcat。當 mod_proxy_ajp 將請求轉送到 Tomcat 時,預設情況下它們會保留其主機名,這允許 Tomcat 將它們定向到具有我在 server.xml 中定義的匹配虛擬主機名的不同 Web 應用程式。

以下範例並未完全按照您所描述的方式進行操作,但我希望它們能夠展示虛擬主機在兩種伺服器配置中可用的靈活性,並允許您提出滿足您的需求的配置。

/etc/apache2/extra/vhosts.conf

<VirtualHost *:80>
    ServerName my.local.website.com
    <Proxy *>
        Require all granted
    </Proxy>
#   proxy specific paths to other virtual hosts
    ProxyPass         /articles  http://a.local.website.com/articles
    ProxyPassReverse  /articles  http://a.local.website.com/articles
    ProxyPass         /entertainment  http://b.local.website.com/entertainment
    ProxyPassReverse  /entertainment  http://b.local.website.com/entertainment
#   send everything else to tomcat via ajp on port 8009
    ProxyPass         /  ajp://localhost:8009/
    ProxyPassReverse  /  ajp://localhost:8009/
</VirtualHost>

$CATALINA_HOME/server.xml

<Host name="my.local.website.com" appBase="temp" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve"
    prefix="website_access." suffix=".log" pattern="common"/>
</Host>

相關內容