Apache-2.2
多台伺服器的 Apache 代理:比較兩種解決方案
我需要為多台伺服器設置 Apache 代理,為一台伺服器設置一個代理。我可以通過兩種方式做到這一點:
- 設置一個虛擬主機和多個代理。每個伺服器都作為虛擬主機的一個子目錄: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>
- 設置 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>