Я застрял с настройкой nginx относительно поддержки SSL и SNI.
Чтобы упростить мой случай, скажем, у меня есть два домена, foo.com
и bar.com
. У меня только один IP и оба домена сопоставлены с этим. Я хочу, чтобы foo.com
был доступен через https
, но не через bar.com
. Последний должен быть просто недоступен на порту 443. Я знаю, что это невозможно с простым SSL, но мне сказали, что я могу смело полагаться на SNI в эти дни. Поэтому я предполагаю, что мой браузер (Chrome) отправляет домен веб-сайта, к которому он хочет получить, наряду с запросом инициализации SSL.
Если я bar.com
, nginx использует настроенный сертификат, выданный для bar.com
, идеально. Если я захожу на https://foo.com
, для которого фактически нет директивы listen *:443
, nginx также отвечает сертификатом bar.com
, поэтому Chrome генерирует исключение сертификата. Я попытался настроить директиву прослушивания SSL для foo.com
и безуспешно добавил следующий код в vhost:
if ($server_port = 443) {
return 444;
}
Теперь он отправляет неверный сертификат и только потом запрещает соединение.
Можно ли разрешить nginx закрыть соединение перед отправкой ответа SSL в браузер, если nginx не может найти соответствующий сертификат для запрашиваемого домена?