使用 NGINX 作为 NodeJs 应用程序时 https 响应非常慢

问题描述 投票:0回答:2

在此处输入代码我有一个映射了多个域的 Web 应用程序。其中一个域使用 SSL,而另一个域则很简单。 我尝试将 NGINX 与 NodeJs 一起使用。我的 HTTPs 响应非常非常慢。请查看conf文件并帮助我解决这个问题。

upstream myserver {
        server 127.0.0.1:4502;
        server 127.0.0.1:4500;
}


server {
        listen 0.0.0.0:80;
        server_name a.myserver.com;
        access_log /var/log/nginx/nodetest.log;
        location / {
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header Host $http_host;
          proxy_set_header X-NginX-Proxy true;

          proxy_pass http://myserver/;
          proxy_redirect off;
        }
}

server {
        listen 0.0.0:443;
        server_name myapps.com;
        access_log off;
        ssl on;
        ssl_certificate /mnt/drives/ssl_certificates/daffodilapps/ssl-bundle.crt;
        ssl_certificate_key /mnt/drives/ssl_certificates/daffodilapps/ryans-key.pem;
        location / {
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $host;
                proxy_set_header X-NginX-Proxy true;

                proxy_pass http://myserver/;
                proxy_redirect off;
node.js nginx google-compute-engine
2个回答
0
投票

您的node.js应用程序似乎不是一个因素,因为您最终以相同的方式访问它。不过,您可能希望通过针对静态页面进行 http 与 https 的性能测试来验证这一点。如果事实证明 nginx SSL 性能仍然很差,您可以根据Nginx SSL 性能调整中的建议尝试更改 nginx 提供的密码套件。

此外,您没有列出您正在使用的虚拟机类型,但如果您当前使用的是 f1/g1,您也可以尝试升级到非共享核心虚拟机。额外的(和专用的)CPU 应该有助于提高 SSL 性能,当他们从微型虚拟机切换到常规 EC2 虚拟机时,文章中也提到了这一点。


0
投票

Node.js 应用程序的 NGINX 配置已设置为反向代理,添加了 SSL 以实现安全连接,并配置了多个域,其中一个域带有 SSL。已使用上游服务器启用负载平衡。为了解决当前HTTPS响应时间慢的问题,需要进一步优化NGINX设置。启用 HTTP/2、实施缓存以减少服务器负载、确保正确的 SSL 配置以及安全标头是下一步的改进步骤。

  • 关键绩效指标(KPI):

响应时间:测量并减少 HTTPS 请求的响应时间。

加载时间:使用 HTTP/2 和缓存减少页面加载时间。

CPU 使用情况: 通过提高 SSL 性能来监控和优化 CPU 使用情况。

upstream backend {
    least_conn;
    server 127.0.0.1:4502; # Use IP for better performance
    server 127.0.0.1:4500;
    keepalive 32; # Maintain persistent connections
}

server {
    server_name example-ssl-domain.com;

    listen 443 ssl http2; # Enable HTTP/2
    ssl_certificate /etc/letsencrypt/live/example-ssl-domain.com/fullchain.pem; # SSL certificate
    ssl_certificate_key /etc/letsencrypt/live/example-ssl-domain.com/privkey.pem; # SSL key
    include /etc/letsencrypt/options-ssl-nginx.conf; # SSL options
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # SSL DH parameters

    # Security Headers
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header X-Frame-Options SAMEORIGIN;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";

    location / {
        proxy_pass http://backend;
        proxy_redirect http://127.0.0.1:4502/ https://$server_name/;

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_http_version 1.1;
        proxy_cache my_cache;
        proxy_cache_valid 200 301 302 60m;
        proxy_cache_bypass $http_cache_control;

        client_max_body_size 1G; # Adjust as needed
        proxy_buffer_size 128k;
        proxy_buffers 4 256k;
        proxy_busy_buffers_size 256k;
        proxy_connect_timeout 300s;
        proxy_read_timeout 300s;
    }
}

server {
    server_name example-ssl-domain.com;
    listen 80;

    if ($host = example-ssl-domain.com) {
        return 301 https://$host$request_uri;
    }

    return 404; # Handle non-HTTPS traffic
}
  • HTTP/2: 在单个 TCP 上启用多个并发流 连接以减少延迟并提高页面加载时间。

  • SSL 配置: 使用 ssl_certificate 和 ssl_certificate_key 指定 SSL 凭据并包含强大的安全标头以增强安全性 安全。

  • 代理设置: proxy_set_header:传递客户端信息 到后端服务器。 proxy_http_version 1.1:确保持久 连接和 WebSocket 支持。 proxy_cache:减少后端负载 并通过缓存缩短响应时间。

  • 性能优化:

    keep-alive 32:维持持久连接以减少开销。 client_max_body_size:根据您的应用程序的需要进行调整 要求。

缓冲区设置(proxy_buffer_size、proxy_buffers、 proxy_busy_buffers_size) 优化大请求的性能。 连接和读取超时(proxy_connect_timeout、 proxy_read_timeout)防止长时间运行的请求被占用 资源。

将 HTTP 重定向到 HTTPS:将端口 80 上的所有流量重定向到 HTTPS 确保安全通信。

通过更改这些设置,您将使 Node.js 应用程序使用 NGINX 运行得更快、更安全。请记住测试您的设置以发现任何速度下降的情况并确保您的服务器足够。优化愉快!

© www.soinside.com 2019 - 2024. All rights reserved.