Apache-2.2
使用 NameVirtualHosts 並重定向到 www 時,我應該如何配置我的 ELB 健康檢查?
我的 ELB 不斷讓我的實例停止服務,因為 HTTP 執行狀況檢查失敗。
我們有一個 DNS 萬用字元,並將所有內容重定向到 www:
vhost.conf:
ServerName www.example.com ServerAlias *.example.com RewriteEngine on RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC] RewriteRule ^ http://www.example.com/$1 [R=301,L]
這適用於實際瀏覽器,但是對 / 的 HTTP 健康檢查失敗,大概是因為它得到了 302。
是使用 TCP 健康檢查的最佳選擇,還是有辦法讓 HTTP 工作?
這個問題已在 AWS 論壇上提出,答案是設置一個預設虛擬主機來處理裸 IP 地址上的流量並且不執行任何重定向。這意味著訪問您的 IP 地址的普通使用者也不會被重定向。
您也可以指定您希望 ELB 請求的 URL 的路徑部分,並通過添加另一個 RewriteCond 來忽略該路徑:
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC] RewriteCond %{REQUEST_URI} !^/health-check$ RewriteRule ^ http://www.example.com/$1 [R=301,L]
訪問該 URL 的普通使用者不會被重定向。
您還可以使用相同的技術來檢測 ELB 的使用者代理。
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC] RewriteCond %{HTTP_USER_AGENT} !^ELB-HealthChecker RewriteRule ^ http://www.example.com/$1 [R=301,L]
欺騙使用者代理的普通使用者不會被重定向。
或者ELB的內部IP地址。
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC] RewriteCond %{REMOTE_ADDR} !^10\. RewriteRule ^ http://www.example.com/$1 [R=301,L]
要使此選項起作用,您將需要
mod_rpaf
(對於 Apache 2.2)或mod_remoteip
(對於 Apache 2.4)修改REMOTE_ADDR
變數以包含標頭內容的正確部分X-Forwarded-For
。只要您正確設置,普通使用者就不可能避免重定向響應。