nginx переходит на неправильный сайт, когда запрашиваемый сайт не прослушивает порт 80

nginx переходит на неправильный сайт, когда запрашиваемый сайт не прослушивает порт 80

У меня были как производственная (www.myexample.com), так и разрабатываемая (dev.myexample.com) среды на одном сервере, с использованием серверных блоков и отдельных каталогов, и обе они прослушивали порт 80. Это работало нормально.

Теперь я установил SSL-сертификат и включил режим SSL в файле конфигурации сайта. В то же время я изменил порт прослушивания с 80 на 443, поэтому сайт не должен отвечать на порту 80, только на порту 443. Сайт разработки все еще работает так же, как и был.

Теперь, похоже, вместо ошибки я получаю сайт разработки при подключении кhttp://www.myexample.com.

Чтобы исправить эту проблему, я добавил настоящий блок сервера «по умолчанию» (server_name установлен на _) и указывающий на каталог, не содержащий файлов.

Есть ли способ получше? Если мне нужен настоящий веб-сайт по умолчанию, я не хочу, чтобы он отображался для известного имени хоста. Я предполагаю, что мне нужно создать серверный блок, прослушивающий www.myexaple.com:80, и настроить его так, чтобы он каким-то образом отклонял все запросы страниц, но как?

Как я могу полностью перестать отвечать на запросы относительно сайта, который я не размещаю?

решение1

Всегда полезно настроить сервер по умолчанию с недопустимым именем хоста. Это гарантирует, что клиенты, у которых не задано ни одного поля заголовка хоста (или с хостом, который вы не настроили), будут отклонены.

server {
    listen              [::]:80 backlog=65536 default_server deferred ipv6only=off rcvbuf=16k sndbuf=512k;
    server_name         _;
    return              403;
}

server {
    listen              [::]:443 backlog=65536 default_server deferred ipv6only=off rcvbuf=16k sndbuf=512k spdy ssl;
    server_name         _;
    ssl_certificate     certificates/_/pem;
    ssl_certificate_key certificates/_/key;
    return              403;
}

https://github.com/Fleshgrinder/nginx-configuration

Как вы видите, я возвращаю код статуса 403 Access Forbidden, поскольку это наиболее подходящий для моего варианта использования (см. комментарий ниже). Если вы просто не хотите возвращать вообще ничего, используйте специальный код nginx 444.

Связанный контент