У меня были как производственная (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;
}
Как вы видите, я возвращаю код статуса 403 Access Forbidden, поскольку это наиболее подходящий для моего варианта использования (см. комментарий ниже). Если вы просто не хотите возвращать вообще ничего, используйте специальный код nginx 444.