У мене є веб-сервер з багатьма віртуальними серверами. Лише 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_server]
- перший серверний блок із відповідною директивою прослуховування (або неявне прослуховування 80;)
Яке переважне рішення цієї проблеми? Чи потрібно мені налаштовувати фіктивний сертифікат для мого спіймання всього блоку сервера, щоб я міг слухати номер 443 і обробляти погані запити? Чи є параметр, про який я не знаю, що змушує точно збігати ім'я хоста server
?