【发布时间】:2017-07-06 12:11:12
【问题描述】:
我有一个 Nginx 服务器处理 http 请求并代理传递到上游的一些节点服务器,如果域名匹配启用的站点之一,所有数据包都重定向到一个节点服务器,只有当通道是 SSL 时,否则 301到 https 版本:
server {
listen 80;
server_name something.com
return 301 https://$host$request_uri;
}
server {
listen 433;
server_name something.com;
ssl_certificate /etc/nginx/cert.crt;
ssl_certificate_key /etc/nginx/cert.key;
ssl on;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
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://127.0.0.1:3000/;
proxy_redirect off;
}
}
一切正常,但证书管理、SSL 握手等都是由 Nginx 完成的。我想让每个节点服务器上游来管理他们自己的 SSL 首选项,所以我不依赖 Nginx 来做到这一点。我的节点服务器已经支持 https 请求,但我不明白是否可以告诉 Nginx:
- 听 80,如果有什么东西,对它的 https 版本执行 301。
听 433,不用担心 SSL,只需代理将所有内容传递给 localhost:3000
并且监听3000端口的节点服务器处理SSL
【问题讨论】:
-
如果你只有一个站点并且想要node处理SSL,为什么不让node监听443端口呢?
-
接受的答案不再准确:见stackoverflow.com/questions/46412934/…