У меня есть веб-сервер со многими виртуальными серверами. Только 1 из которых является SSL. Проблема заключается в том, что из-за того, что серверный блок catchall не прослушивает SSL, любой запрос https на другие сайты обслуживается блоком 1 SSL.
Моя конфигурация, по сути, выглядит так:
# the catch all
server {
listen 80 default;
# I could add this, but since I have no default cert, I cannot enable SSL,
# and this listen ends up doing nothing (apparently).
# listen 443;
server_name _;
# ...
}
# some server
server {
listen 80;
server_name server1.com;
# ...
}
# some other server ...
server {
listen 80;
server_name server2.com;
# ...
}
# ... and it's https equivalent
server {
listen 443;
ssl on;
server_name server2.com;
# ...
}
Теперь, когда для 443 нет прослушивателя по умолчанию, такой запрос в https://server1.com
итоге будет обслуживаться server2.com
блоком https. Это следует логике для server_name
в документах.
Если совпадений нет, будет использован блок сервера {...} в файле конфигурации в следующем порядке:
- блок сервера с соответствующей директивой прослушивания, помеченной как [default | default_server]
- первый серверный блок с соответствующей директивой прослушивания (или неявным прослушиванием 80;)
Какое решение для этой проблемы является предпочтительным? Нужно ли мне устанавливать фиктивный сертификат для моего блока перехвата всех серверов, чтобы я мог прослушивать 443 и обрабатывать неправильные запросы? Есть ли параметр, о котором я не знаю, который заставляет точное имя хоста соответствовать server
?