Nginx

Nginx 伺服器上的 Amazon ELB 和多域

  • March 11, 2013

我有一個 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)
}

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