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

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 и настроить его так, чтобы каким-то образом отклонять все запросы страниц, но как?

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

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

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.