У нас есть приложение Java Spring Boot, которое находится за обратным прокси-сервером NGIX. При использовании HTTP все работает как положено - время отклика API быстро завершается.
После переключения протокола на HTTPS время отклика API значительно сокращается. В инструментах разработчика браузера запрос очень долго отображается как ожидающий. В бэкэнде потоки обслуживания API не возвращаются и в конечном итоге не могут освободить соединения с БД.
Поскольку этого не происходит при прямом доступе к API без NGINX в середине, а также при отключенном SSL, я думаю, что это что-то особенное. неправильная конфигурация SSL. Пока я понятия не имею, что это могло быть, так как мне это кажется довольно стандартным. Есть какие-нибудь подсказки, что может случиться или как устранить проблему?
Версия NGINX:
$ nginx -v
nginx version: nginx/1.10.3 (Ubuntu)
Конфигурация NGINX выглядит так:
server {
listen 443 ssl http2;
server_name something.de;
access_log /var/log/nginx/something.access.log;
access_log syslog:server=unix:/dev/log,facility=local7,tag=nginx combined;
root /usr/share/something/ui/web;
index index.html index.htm;
# SUPPORT-136 set max upload to 70M
client_max_body_size 70M;
location / {
# SUPPORT-271 lock out unsupported browsers
if ($http_user_agent ~ 'MSIE|Trident|Firefox|Opera') {
rewrite ^.* /unsupportedBrowser.html break;
}
if ($http_user_agent ~ 'iPhone;' ) {
root /usr/share/something/ui/iphone;
}
index index.html index.htm;
}
location /api {
proxy_pass http://upstream_something/api;
proxy_read_timeout 180;
proxy_hide_header WWW-Authenticate;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# GZIP Compression of responses
#
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
# SSL security
#
ssl_certificate /etc/ssl/certs/STAR_something.bundle;
ssl_certificate_key /etc/ssl/private/STAR_something.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2;
ssl_ciphers AES256+EECDH:AES256+EDH:!aNULL;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/nginx/dhparams.pem;
# General security
add_header X-Frame-Options SAMEORIGIN always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
}
Я обнаружил частую проблему, связанную с ответами на буферизацию nginx. Когда вы выключаете буферизацию, ответы передаются от NGINX клиенту синхронно.
Для этого включите следующую строку в свой блок местоположения api.
proxy_buffering off;