У меня на сервере есть два приложения, которые работали отлично, пока я не решил перевести их на HTTPS.
Конфигурация Nginx для приложения 1:
server_name abc.com my.abc.com static.abc.com
Настройка приложения 2:
server_name _;
До включения SSL оба приложения работали, например
Приложение1http://static.abc.com/some-assets.png
Приложение2http://static.def.com/some-assets.png
После включения SSL
Приложение1https://static.abc.com/some-assets.png
Приложение2https://static.def.com/some-assets.png
Если я сейчас попытаюсь получить доступ к App2, https://static.def.com/some-assets.png
он также каким-то образом укажет на App 1.
Я попытался разобраться и обнаружил, что если заменить server_name _;
на server_name static.def.com;
в конфигурации Nginx App 2, то все начинает работать.
У меня вопрос, требуется ли Nginx явно определять домены, если вы хотите обслуживать их по HTTPS? Или это что-то с SSL-рукопожатием, которое не работает и т. д. и это заканчивается так?
Обновлять:
Файлы конфигурации Nginx:
решение1
Как сказал Йоханнес, я думаю, у вас неправильное представление о том, что _
означает a server_name
: абсолютно ничего. Большинство руководств включают его в свой сервер-сборник по умолчанию, чтобы быть уверенными, что он не мешает ни одному именованному виртуальному серверу.
Что вы, должно быть, упустили из того, что читаете (или, может быть, люди, которые написали то, что вы читаете, упустили это), так это то, что правильный сервер по умолчанию на самом деле включает эту default_server
опцию как часть listen
директивы. Прочитайте nginx.org/r/listen для получения дополнительной информации.
решение2
Это может зависеть от порядка определений вашего сервера. _
не является специальным именем, это просто недопустимый домен, и поэтому он никогда не будет соответствовать. Это делает его таким же, как имена серверов в другом определении сервера для хоста, например static.def.com
: Оба не совпадают. Если совпадений нет вообще, nginx просто возьмет первое определение сервера.