Nginx выходит между vhosts и SSL

Проверьте свои другие журналы, чтобы видеть, находите ли Вы что-нибудь подобным около того же периода времени. Если так, Ваши системные часы, возможно, изменились существенно. в тот период времени. При выполнении ntp, этого, как предполагается, не происходит как они slews часы постепенно. Однако, например, если бы кто-то выполнил 'ntpdate', и часы были выключены на многие часы, то Вы видели бы, что достижение переходит в журналах.

Другая возможность состоит в том, что Ваша система была перезагружена тем временем, и время было ресинхронизировано на начальной загрузке, ведя к переходу времени.

Осмотр других файлов журнала как /var/log/messages должен дать Вам еще некоторый ключ к разгадке то, как это произошло.

3
задан 29 March 2014 в 12:42
3 ответа

Ваша проблема в том, что SSL не поддерживает несколько виртуальных хостов на одном IP.

Когда NGINX получает новое соединение через HTTP / 1.1, запрос включает заголовок HOST, который указывает, какой виртуальный хост будет обслуживать (это было большое изменение в версии 1.1, позволяющее использовать виртуальные хосты в том виде, в каком мы их знаем сегодня).

Но с HTTPS заголовки зашифрованы, и прежде чем их можно будет расшифровать, необходимо установить обмен ключами и уровень TLS. Другими словами, у nginx нет способа выбрать правильный блок SSL-сервера до тех пор, пока он не отправит сертификат SSL.

Вы можете добавить перенаправление, соответствующее доменному имени site1, в конфигурации site2, но пользователь все равно получит сообщение сертификат недействителен, так что это не очень удобно.

Есть несколько многодоменных сертификатов, которые вы можете использовать, хотя это будет стоить вам.

Самый простой и, вероятно, лучший вариант для желаемой конфигурации - использовать разные IP-адреса для каждого сайта. Различные конфигурации сервера NGINX могут привязываться к разным адресам, поэтому никогда не возникает вопросов, какой из них какой. Большинство провайдеров могут предоставить вам несколько IP-адресов, некоторые даже несколько блоков, и, конечно же, в облаке вы можете просто выделить больше.

обновление: SNI решает эту проблему, перемещая заголовок Host за пределы зашифрованной полезной нагрузки, и поддерживается современные браузеры.

3
ответ дан 3 December 2019 в 05:43

Невозможно прослушивать порт 443 на том же IP-адресе только для одного сайта, потому что он знает только, какой сайт хочет иметь клиент, из SSL Client Hello. После получения сообщения Hello у него есть возможность либо завершить квитирование SSL, либо разорвать соединение. В первом случае вам необходимо предоставить сертификат, во втором случае клиент получит некоторую бесполезную ошибку о разорванном SSL-соединении.

В конце все сводится к следующим вариантам:

  • Разорвать соединение и вызвать некоторые странное сообщение об ошибке на клиенте (я не знаю, можно ли включить такое поведение с помощью nginx).
  • Обслуживать тот же сертификат, что и для site2WithSSL.com, и перенаправлять клиента только на http. К сожалению, перенаправление будет выполнено после подтверждения SSL, и это подтверждение SSL вызовет ошибку на клиентах, потому что имя хоста не соответствует сертификату.
  • Используйте самозаверяющий сертификат для site1 и перенаправляйте на http-only: та же проблема, потому что клиент не примет сертификат.
  • Используйте настоящий сертификат для site1, даже если вы используете его только для перенаправления только на http.

Только последний вариант будет работать без ошибок на клиенте.

2
ответ дан 3 December 2019 в 05:43

Я думал о конфигурации для site1.com, прослушивающего порт 443 без ssl, который перенаправляет только на http://site1.com. Я думаю, что это должно работать без необходимости нового IP адреса.

.
0
ответ дан 3 December 2019 в 05:43

Теги

Похожие вопросы