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

Имя конфликтующего сервера Nginx для поддомена

В настоящее время у меня есть vhost, работающий на Nginx для foo.domain.com, и все отлично работает.

Я создал новый файл для нового поддомена, который хочу добавить, под названием bar.domain.com. Я использую одинаковые настройки для обоих.

Когда я перезапускаю Nginx, я получаю

Restarting nginx: nginx: [warn] conflicting server name "" on 0.0.0.0:443, ignored nginx.

Когда я перехожу на bar.domain.com, я вижу то, что должен видеть, но когда я перехожу на foo.domain.com, я вижу страницу, на которую ссылается bar.domain.com.

Фу

upstream php-handler {
    server unix:/var/run/php5-fpm.sock;
}

server {
        listen 80;
        server_name foo.domain.com;
        return 301 https://$server_name$request_uri;
}

server {
        listen 443;

        ssl on;
        ssl_certificate      [path_foo]/cacert.pem;
        ssl_certificate_key  [path_foo]/privkey.pem;

        root [path]/foo;

        ...
}

Бар

server {
        listen 80;
        server_name bar.domain.com;
        return 301 https://$server_name$request_uri;
}

server {
        listen 443;

        ssl on;
        ssl_certificate      [path_bar]/cacert.pem;
        ssl_certificate_key  [path_bar]/privkey.pem;

        root [path]/bar;
}

Где я ошибаюсь?

Мне кажется, что для ваших блоков https тоже нужно указать имена серверов, например

server {
    listen 443;
    server_name bar.domain.com;
    ssl on;
    ssl_certificate      [path_bar]/cacert.pem;
    ssl_certificate_key  [path_bar]/privkey.pem;

    root [path]/bar;
}

У меня была аналогичная проблема, когда у меня случайно было дублированное имя сервера:

server_name myserver.example.com myserver.example.com;

Исправлено изменением его на:

server_name myserver.example.com;

У вас также могут быть дополнительные файлы в /etc/nginx/sites-available/<site-name> которые связаны с /etc/nginx/sites-enabled/<site-name>.

Настройки в этих файлах могут конфликтовать с /etc/nginx/sites-available/default файл

Также проверьте каждый файл в /etc/nginx/conf.d для дубликатов.

В моем случае, nginx -t пройдены тесты - я получил это сообщение об ошибке при попытке запустить nginx.

Мой /etc/nginx/sites-enabled файлы были свободны от дубликатов домена (имени сервера) и имели только 1 ссылка на server_default (и нет localhost дубликаты)

Вместо этого было 2 файла в conf.d которые оба ссылались на конкретный домен (т.е. в 2 файлах была строка вроде: servername mydomain.com, где одно из доменных имен было указано в 2 файлах).

Мое решение: Поэтому убедитесь, что все файлы в conf.d только ссылка на какой-либо конкретный servername (доменное имя) не более одного раза.


(К сожалению после исправления вышеуказанной проблемы я получаю:
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) сообщения об ошибках, когда я пытаюсь перезапустить nginx.)

Обновить: FYI, re: ...Address already in use сообщение об ошибке выше:
Все, что мне нужно было сделать, это sudo fuser -k 80/tcp затем service nginx restart работал как шарм!
Я нашел здесь ответ: https://easyengine.io/tutorials/nginx/troubleshooting/emerg-bind-failed-98-address-already-in-use/

update2:
Было высказано предположение, что другой процесс использовал порт 80 (поэтому его уничтожение сработало, а также имеет смысл, что b / c nginx был не работает в то время).
https://community.letsencrypt.org/t/nginx-emerg-bind-to-80-failed-98-address-already-in-use/52914/4

Они также отмечают, что просмотр процесса перед тем, как его просто убить, может дать представление о том, что вызвало проблему.
Следовательно, вероятно, лучше использовать: sudo fuser -k 80/tcp (без опции -k), за которым следует grep для тех номеров процессов.
systemctl list-unit-files вывод, может дать представление о конфликтующем процессе

или:
fuser -kivn tcp 80, где:
-v печатает имя процесса в дополнение к идентификатору процесса
-i заставляет подсказывать перед убийством
https://community.letsencrypt.org/t/nginx-emerg-bind-to-80-failed-98-address-already-in-use/52914/5

В моем случае я не смог найти ни одного дубликата. Однако у меня был default.conf, в котором я прокомментировал всю конфигурацию, кроме открывающего блока сервера и закрывающей скобки ... и это вызвало конфликтную ошибку.

По сути, проблема была вызвана неучтенным серверным блоком БЕЗ директивы server_name, а не дубликатом.