Предварительное чтение Nginx SSL спорадически получает запросы, когда имя сервера не извлекается - PullRequest
0 голосов
/ 21 марта 2019

Я использую модуль потока nginx , чтобы использовать nginx в качестве обратного прокси-сервера tcp перед s3. В последнее время мне нужно было добавить логику для размещения дополнительного апстрима. Для этого я решил использовать условную логику через переменную карты $ ssl_preread_server_name. ssl_preread позволяет nginx извлекать имя сервера из сообщения ClientHello без прерывания SSL. Вы можете увидеть логику ниже:

map $ssl_preread_server_name $https_cname {
    s3.amazonaws.com https_s3_backend;
    aws-service-2.amazonaws.com aws-service-2-backend;
}
upstream https_s3_backend {
    server s3.amazonaws.com:443;
}
upstream aws_service_2_backend {
    server aws-service-2.amazonaws.com:443;
}

server {
    listen       443;
    proxy_pass $https_cname;
    ssl_preread on;
}

Когда приходит запрос с именем сервера s3.amazonaws.com, запрос отправляется на s3. Когда приходит запрос с именем сервера aws-service-2.amazonaws.com, запрос отправляется на aws-service-2.

Это работает большую часть времени. Но иногда в журнале ошибок появляются ошибки, указывающие на то, что каким-то образом запросы попадают на серверы nginx через порт 443 без имени сервера.

[error] ... no host in upstream "", client: x.x.x.x, server: 0.0.0.0:443

Когда я добавляю оператор по умолчанию в логику карты, эти ошибки исчезают. Каковы возможные объяснения некоторых входящих запросов s3 без извлеченного имени сервера? В настоящее время запросы могут попасть в эти блоки nginx только в том случае, если кто-то выполняет операцию s3.

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