是否可以让上游服务器处理 Nginx 服务器后面的 SSL 证书?



我有一个 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,只需代理将所有内容传递给本地主机:3000

  • 侦听端口 3000 的节点服务器处理 SSL

听433,不用担心SSL,只需代理将所有内容传递给本地主机:3000

不,不是nginx,你必须使用端口转发。

nginx要么必须使用一些SSL密钥,并可能使用SSL将流量代理到某个Node应用程序,这意味着Node和nginx都必须管理自己的SSL密钥(nginx用于客户端-nginx连接,Node应用程序用于nginx-nodeApp连接(。

或者nginx可以使用没有SSL的HTTP将请求代理到使用SSL的Node,这意味着client-nginx连接将是不安全的,只有nginx-NodeApp连接是安全的。这也意味着 https://www.example.com/行不通——尽管 http://www.example.com:443/行不通。

如果您希望 Node 处理 SSL 密钥而不是反向代理(通常这样做(,那么您必须在 TCP/IP 级别使用端口转发将流量传递给 Node 应用程序,而无需使用反向代理 (nginx(。

通常使用反向代理,以便应用程序不必处理用于客户端连接的 SSL 密钥(以及其他内容(。如果您希望 Node 应用程序使用 SSL 密钥而不是反向代理,那么您应该首先重新考虑使用反向代理。

最新更新