У меня есть обратный прокси-сервер Nginx, который таинственным образом перестает работать через несколько часов. Журнал ошибок заполняется ошибками SSL при подключении к восходящему каналу. Запуск «nginx -s reload» (перезапуск службы nginx) устраняет проблему до следующего сбоя. Есть идеи куда копать дальше?
Файлы конфига не меняются, никакой другой активности в логах нет. Не могу определить "время до отказа", иногда кажется 3-4 часа, иногда где-то 8.
Приложение - это какое-то стороннее динамическое веб-приложение на основе Java Swing из устаревшего корпоративного подвала ужасов... :)
Фрагмент одного из множества местоположений конфигурации Nginx для определенного местоположения URI. Невозможно использовать одно / местоположение, так как одно из местоположений требует авторизации MTLS, а другие просто должны полагаться на белый список.
location ~* ^/app-location(/?|/.*|-.*)$ {
включить /etc/nginx/conf.d/include.APP.whitelist;
proxy_pass https://__APP_LB_DNS__:6443;
proxy_ssl_server_name включено;
proxy_ssl_name __APP_LB_DNS__;
proxy_ssl_trusted_certificate __certificate-backend-ca-location__;
proxy_ssl_verify выключен;
proxy_ssl_verify_depth 3;
proxy_ssl_session_reuse включено;
proxy_ssl_certificate __client-certificate-location__;
proxy_ssl_certificate_key __client-certificate-key-location__;
}
Через какое-то время я начинаю получать 502: Bad Gateway errors и error.log заполняется такими ошибками. 10.0.0.10 — это IP-адрес восходящего балансировщика нагрузки для имени хоста APP_LB_DNS.
09.02.2022, 21:36:45 [ошибка] 12371#12371: *59560 SSL_do_handshake() не удалось (SSL: ошибка: 14094410: подпрограммы SSL: ssl3_read_bytes: ошибка рукопожатия предупреждения sslv3: номер предупреждения SSL 40) при квитировании SSL с восходящим потоком , клиент: CLIENT_IP, сервер: EXTERNAL_DNS_NAME, запрос: "GET /app-location/ HTTP/1.1", восходящий поток: "https://10.0.0.10:6443/app-location/", хост: "EXTERNAL_DNS_NAME", реферер: "http://КЛИЕНТ_DNS:53998/"
Мне пришлось добавить параметры, чтобы убедиться, что Nginx взаимодействует с бэкэнд-LB Azure через его DNS-имя. В противном случае я постоянно получал ошибки выше. Еще одна вещь, которая меня озадачивает, это то, что только это странное приложение требует таких опций. Другие собственные написанные приложения хорошо работают без этих строк.
proxy_ssl_server_name включено;
proxy_ssl_name __APP-DNS__;
На сервере работает Nginx на Centos 7 в виртуальной машине Azure.
Nginx-1.18.0-2.el7.ngx.x86_64
Nginx-modsecurity3-centos7-3.0.4-1.x86_64