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