【发布时间】:2017-11-29 10:47:09
【问题描述】:
我有 nodejs express 坐在 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;
}
}
如果我只是在 express 端实现一个 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 来做。
- 我能从做一个和另一个中得到什么吗?
- 这里的最佳做法是什么...让 nginx 或节点应用程序执行此操作?
- 而且,假设最好在节点应用程序上执行此操作,那么此处设置 nginx 的正确实现是什么?
谢谢!
【问题讨论】:
-
AFAIK
nginx无法进行 SSL 路径通过。 -
stackoverflow.com/a/39701582/1497533(你使用
location /但是如果你不先解密请求,nginx怎么知道请求的位置?) -
感谢你们的反馈!!