Назад | Перейти на главную страницу

Amazon ELB и мультидомен на сервере Nginx

У меня есть экземпляр 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;
}

Я не уверен, какой путь ping использовать на ELB (amazon), потому что, если я попробую HTTP, экземпляр всегда выйдет из строя. Если я попробую TCP (порт 80), пинг пройдет успешно. Мне нужно использовать HTTP, потому что я хочу использовать липкость.

Любой совет? спасибо, Дэнни

Другой ответ на Serverfault сообщает нам, что ELB не ожидает ничего, кроме 200 OK код состояния.
Это проблема для вашей установки, потому что rewrite вызовет 3** коды состояния.

Создайте новое местоположение для пути ping следующим образом:

location = /elb-ping {
    return 200;
}

Тогда обязательно используйте www. для пинга, чтобы избежать перенаправления

Если вы не можете изменить домен ping на www. :
Вам нужно будет переместить перенаправление на www. к server блок.
Или вы определяете цель статического пинга в своей конфигурации.

Простой способ

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