Nginx
Nginx 伺服器上的 Amazon ELB 和多域
我有一個 EC2 實例在多個域中執行 Nginx。我的配置是這樣開始的:
server { listen 80; #disable_symlinks off; server_name _; #allow few domains #Adding 'www.' to url in case it doesen't if ($host !~* ^www\.) { rewrite ^(.*)$ http://www.$host$1 permanent; } location / { if (!-e $request_filename){ rewrite ^(.*)$ /index.php; } index index.html index.php; }
我不確定在 ELB(亞馬遜)上使用哪個 ping 路徑,因為如果我嘗試 HTTP,實例總是會失敗。如果我嘗試 TCP(埠 80),則 ping 成功。我必須使用 HTTP,因為我想使用粘性。
有什麼建議嗎?謝謝,丹尼
Serverfault 的另一個答案告訴我們,ELB 只需要
200 OK
狀態碼。這對您的設置來說是個問題,因為
rewrite
會導致3**
狀態碼。為 ping 路徑創建一個新位置,如下所示:
location = /elb-ping { return 200; }
然後確保使用 www。讓 ping 避免重定向
如果您無法將 ping 域更改為 www。:
您必須將重定向移動到 www。到一個
server
街區。或者您在配置中定義一個靜態 ping 目標。
簡單的方法
server { listen 81; # What about using a different port for ELB ping? server_name _; # Match all if the listen port is unique, #server_name elb-instance-name; # Or match a specific name. return 200; # Not much magic. } server { listen 80; #disable_symlinks off; server_name _; #allow few domains #Adding 'www.' to url in case it doesen't if ($host !~* ^www\.) { rewrite ^(.*)$ http://www.$host$1 permanent; } location / { if (!-e $request_filename){ rewrite ^(.*)$ /index.php; } index index.html index.php; }
方式太複雜
server { listen 80; # match hostnames NOT being www.* # Unfortunately matches only names with length >= 4 server_name ~^(?P<domain>[^w]{3}[^\.].*)$; location / { rewrite ^(.*)$ $scheme://www.$domain$1; # rewrite to www.* } location = /elb-ping { return 200; } } server { listen 80; server_name www.*; # match hostnames starting with www.* ## YOUR EXISTING CONFIG HERE (without the if block and elb-ping location) }