Apache-2.2

多台伺服器的 Apache 代理:比較兩種解決方案

  • September 5, 2014

我需要為多台伺服器設置 Apache 代理,為一台伺服器設置一個代理。我可以通過兩種方式做到這一點:

  1. 設置一個虛擬主機和多個代理。每個伺服器都作為虛擬主機的一個子目錄:aaa.bbb.ccc/test1 和 aaa.bbb.ccc/test2
<VirtualHost *:443>
   ServerName aaa.bbb.ccc
   RewriteEngine on
   RewriteRule ^/test1$ /test1/ [R]
   RewriteRule ^/test1(.*) http://localhost:8080$1 [P]          
   RewriteRule ^/test2$ /test2/ [R]
   RewriteRule ^/test2(.*) http://localhost:8081$1 [P]
   <Location "/test1">
       ...
   </Location>
   <Location "/test2">
       ...
   </Location>
   ....
</VirtualHost>
  1. 設置 N 個虛擬主機和 N 個代理,為 N 個伺服器提供服務。每台伺服器都將配備一個虛擬主機。
NameVirtualHost *:443
<VirtualHost *.443>
   ServerName aaa.bbb.ccc
   RewriteEngine on
   RewriteRule ^(.*) http://localhost:8080$1 [P]
   <Location "/">
       ...
   </Location>
</VirtualHost>
<VirtualHost *.443>
   ServerName ddd.bbb.ccc
   RewriteEngine on
   RewriteRule ^(.*) http://localhost:8081$1 [P]
   <Location "/">
       ...
   </Location>
</VirtualHost>

兩者都有效。但是我不知道哪個更好。有人可以比較兩種方法的優缺點嗎?

這兩種方式通常都沒有問題。但兩者之間真正的大區別在於證書管理。選項 1 只需要 1 個 SSL 證書。選項 2 取決於您對主機名所做的操作。如果唯一改變的是子域,您可以使用萬用字元證書,或者您將需要每個虛擬主機的證書。兩者都可能變得昂貴。

一般來說,這兩個選項之間最大的真正驅動因素將是“業務”類型的決策。在內部伺服器之間進行更清晰的分離。

您實際上如何將內部伺服器暴露給外部,並不是最有效的方法。從技術上講,它是有效的,但是您可能會遇到很多問題。頁面上的連結可能會呈現錯誤。在外部網站上,您實際上會暴露內部連結並顯示該網站已損壞。圖像和 Javascript 也將無法正常執行或做一些時髦的事情。你真的應該使用 Proxy 和 ReverseProxy

ProxyRequests off
ProxyPass /test1/ http://127.0.0.1:8080/
ProxyPass /test2/ http://127.0.0.1:8081/
ProxyHTMLURLMap http://127.0.0.1:8080 /app1
ProxyHTMLURLMap http://127.0.0.1:8081 /app2

<Location /test1/>
       ProxyPassReverse /
       ProxyHTMLEnable On
       ProxyHTMLURLMap  /      /test1/
</Location>

<Location /test2/>
       ProxyPassReverse /
       ProxyHTMLEnable On
       ProxyHTMLURLMap /       /test2/
</Location>

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