Nginx 服务器上的 Amazon ELB 和多域

Nginx 服务器上的 Amazon ELB 和多域

我有一个运行 Nginx 的 EC2 实例,其中包含多个域。我的配置如下:

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,因为我想使用粘性。

有什么建议吗?谢谢,丹尼

答案1

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)
}

相关内容