Подтвердить что ты не робот

Обслуживание двух сайтов с одного сервера с помощью Nginx

У меня есть приложение Rails и работает на моем сервере, и теперь я хотел бы добавить еще один.

Я хочу, чтобы Nginx проверял, для чего нужен запрос и разделяет трафик на основе имени домена

Оба сайта имеют свой собственный nginx.conf, символически привязанный к сайтам, но я получаю сообщение об ошибке, начинающемся с nginx Starting nginx: nginx: [emerg] duplicate listen options for 0.0.0.0:80 in /etc/nginx/sites-enabled/bubbles:6

Они слушают 80, но для разных вещей.

Сайт № 1

upstream blog_unicorn {
  server unix:/tmp/unicorn.blog.sock fail_timeout=0;
}

server {
  listen 80 default deferred;
  server_name walrus.com www.walrus.com;
  root /home/deployer/apps/blog/current/public;

  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

  try_files $uri/index.html $uri @blog_unicorn;
  location @blog_unicorn {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://blog_unicorn;
  }

  error_page 500 502 503 504 /500.html;
  client_max_body_size 4G;
  keepalive_timeout 10;
}

Второй сайт:

upstream bubbles_unicorn {
  server unix:/tmp/unicorn.bubbles.sock fail_timeout=0;
}

server {
  listen 80 default deferred;
  server_name bubbles.com www.bubbles.com;
  root /home/deployer/apps/bubbles/current/public;

  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

  try_files $uri/index.html $uri @bubbles_unicorn;
  location @bubbles_unicorn {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://bubbles_unicorn;
  }

  error_page 500 502 503 504 /500.html;
  client_max_body_size 4G;
  keepalive_timeout 10;
}
4b9b3361

Ответ 1

В документации указано:

Параметр default_server, если он присутствует, приведет к тому, что сервер станет сервером по умолчанию для пары адресов: порт.

Также очевидно, что может быть только один сервер по умолчанию.

И это также говорит:

Директива прослушивания может иметь несколько дополнительных параметров, специфичных для системных вызовов сокета. Они могут быть указаны в любой директиве прослушивания, но только один раз для данного адреса: пара портов.

Итак, вы должны удалить default и deferred из одной из директив listen 80. То же самое относится и к директиве ipv6only=on.

Ответ 2

Просто нажмите на эту же проблему, но дублирующая директива default_server была не единственной причиной этого сообщения.

Вы можете использовать параметр backlog только в одной из директив server_name.

пример

сайт 1:

server {
    listen 80 default_server backlog=2048;
    server_name www.example.com;
    location / {
        proxy_pass http://www_server;
    }

сайт 2:

server {
    listen 80;    ## NOT NOT DUPLICATE THESE SETTINGS 'default_server backlog=2048;'
    server_name blogs.example.com;
    location / {
        proxy_pass http://blog_server;
    }

Ответ 3

У меня была такая же проблема. Я исправил это, изменив мой файл /etc/nginx/sites-available/example2.com. Я изменил блок сервера на

server {
        listen 443 ssl; # modified: was listen 80;
        listen [::]:443; #modified: was listen [::]:80;
        . . .
}

И в /etc/nginx/sites-available/example1.com я закомментировал listen 80 и listen [::]:80 потому что блок сервера уже был настроен для 443.