使用ssl

时间:2017-06-26 14:44:09

标签: node.js ssl nginx

我有nodejs表示坐在nginx后面。目前一切正常。我使用SSL实现了Nginx以使用https,然后只需将请求转发到指定端口上的运行节点应用程序。我想知道这是不是最好的方法吗?这就是我现在所拥有的......

server {
    listen 80;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name mysite.somethingelse.com www.mysite.somethingelse.*;
    ssl_certificate /path/to/my/cert.pem;
    ssl_certificate_key /path/to/my/key.key;
    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

如果我只是在快递端实施https服务器怎么办?然后将请求代理到那个,并让它做所有的解码?像这样:

server {
    listen 80;
    return 301 https://$host$request_uri;
}

server {
    listen 443;
    server_name mysite.somethingelse.com www.mysite.somethingelse.*;
    location / {
        proxy_pass https://localhost:3000;
        proxy_http_version 1.1;
        proxy_cert path/to/cert.pem
        proxy_key path/to/key.key
    }
}

第二个版本可能甚至不正确。但我想要的是在节点应用程序上实现SSL而不是让nginx这样做。

  1. 从一对一到另一对,我获得了什么?
  2. 这里的最佳做法是什么?让nginx或节点应用程序执行此操作?
  3. 并且,假设它在节点应用程序上做得更好,这里设置nginx的正确实现是什么?
  4. 谢谢!

1 个答案:

答案 0 :(得分:0)

如果您正在追求性能并在多个节点实例之间实现负载平衡,那么在独立计算机上终止SSL是一个好主意。但是,如果您要运行节点应用程序的单个实例并且预计负载不高,那么在节点中设置SSL可能更简单。另外我建议你不要使用nginx并切换到NAT(使用防火墙),因为这种方法将使用更少的资源。

支持在nginx上终止SSL的另一个论点是文档和配置最佳实践。您应该知道配置SSL不仅仅是关于设置证书和私钥,还有很多关于不同密码,协议和漏洞的安全注意事项。并且更容易找到nginx的工作解决方案,技巧和配置示例,而不是节点。

关于你的问题:

  1. 这取决于你的目标。
  2. 这取决于您的目标,但我建议您目前使用nginx进行SSL终止。
  3. 我建议你在这种情况下实现NAT而不是nginx。