NGINX SSL 反向代理的性能下降

NGINX SSL 反向代理的性能下降

我们有一个 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;
}

答案1

我发现一个常见问题与 nginx 缓冲响应有关。关闭缓冲时,响应会从 NGINX 同步传递到客户端。

为此,请在您的 api 位置块中包含以下行。

proxy_buffering off;

相关内容