【问题标题】:Danger of reverse proxying with nginx 80 and 443 to a node process listening on port 3000?使用 nginx 80 和 443 反向代理对侦听端口 3000 的节点进程的危险?
【发布时间】:2020-08-11 21:32:57
【问题描述】:

我有一个不寻常的情况。我制作了一个节点应用程序监听端口 3000,我从 443 反向代理,如果我在端口 80 上收到请求,我恢复到 443。一切都在网上运行良好,但这个应用程序被设计为在它自己的服务器上脱机运行交钥匙系统。在线 443 上有意义,但是离线,当服务器没有连接到互联网时,它只需要 iOS 客户端设备在线,它只允许在 443 上连接(由于 Apple 传输层,感谢 Apple )。否则,在 80 还是 443 上对系统来说真的无所谓。

现在,有趣的部分。在 Windows 上,当服务器离线并且客户端通过 https 连接到服务器时,我收到关于 Windows 无法检查证书吊销列表的警告,显然是因为服务器不在线并且无法连接到证书颁发机构.如果我安装了证书,警告不会消失,而且它会搞砸系统,因为它在离线时永远无法检查任何吊销列表(因为它是要运行的)。如果设备已经连接到互联网,它可以验证证书没有被吊销,但是客户端计算机在互联网上需要一个额外的步骤才能让授权执行吊销步骤。我的客户相当不懂技术,所以当他们只是想连接时很难解释这个要求。

我想我找到了一个部分解决方案——让 nginx 监听并将 443 和 80 反向代理到端口 3000(复制服务器块,只需提供 443 监听的密钥)。这样,我可以告诉不想在连接前做在线检查的客户连接到端口 80,我可以告诉 iOS 客户连接到端口 443。

我只是不知道我是否在做一些危险的事情,监听两个端口并将它们都指向 3000。系统似乎工作正常,但我对这个设置知之甚少,不知道我是否在走路成问题。我会很感激任何关于这是好还是坏的建议。感谢您的建议。

【问题讨论】:

    标签: node.js windows nginx ssl-certificate


    【解决方案1】:

    没问题。

    而且您不需要完全复制服务器块,您可以在同一个块上同时拥有 80 和 443 个侦听器,因此它们共享服务器配置的其余部分。唯一的区别是 443 侦听器在此时终止 SSL。

    类似:

    server {
        listen       80;
        listen       443 ssl;
        server_name  foo.example.com;
    
        ssl_certificate     /etc/pki/tls/certs/foo.example.com.bundle.crt;
        ssl_certificate_key /etc/pki/tls/private/foo.example.com.key;
    
        location / {
            proxy_pass http://127.0.0.1:3000/;
        }
    

    【讨论】:

      猜你喜欢
      • 2018-01-25
      • 1970-01-01
      • 2015-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-13
      • 2020-11-08
      • 1970-01-01
      相关资源
      最近更新 更多