在NodeJS中创建可以处理多个安全域的反向代理

tek*_*rat 8 ssl proxy reverse-proxy node.js

我正在尝试在NodeJS中创建反向代理.但是我一直在运行这个问题,因为我只能在同一个端口(443)上提供一组证书/密钥对,即使我想服务多个域.我已完成研究并继续遇到同样的路障:

  • 可以从非安全本地源(http本地访问和服务的https public)为多个域安全域提供服务的节点脚本
  • 让我通过域头动态地为SSL证书服务
  • 例:
    • https://www.someplace.com:443将从http:// thisipaddress:8000中提取并使用www.someplace.com的证书和密钥文件
    • https://www.anotherplace.com:443将从http:// thisipaddress:8080中提取并使用www.anotherplace.com的证书和密钥文件
    • 等.
  • 我看过使用NodeJShttps.createServer(options,[requestListener])
    • 但是这种方法每个端口只支持一个证书/密钥对
    • 我找不到基于域头动态切换证书的方法
    • 我不能要求我的员工使用自定义https端口
    • 如果我为多个域名提供相同的SSL证书,即使它是安全的,我也会遇到浏览SSL证书错误
  • 我查看了node-http-proxy,但据我所知它有相同的限制
  • 我查看了Apache mod-proxy和nginx,但我宁愿拥有一些我可以更直接控制的东西

如果有人能够向我展示一个服务多个安全域的示例,每个安全域都使用自己的证书来自相同的端口号(443),使用NodeJShttps.createServernode-http-proxy,我将感激不尽.

Ste*_*ich 5

让我通过域标头动态服务器 SSL 证书

没有域标头,所以我猜您指的是 HTTP 请求中的 Host 标头。但是,这行不通,因为

  • HTTPS 是将 HTTP 封装在 SSL 中
  • 因此,您首先必须执行 SSL 层(例如 SSL 握手,这需要证书),然后是 HTTP 层
  • 但 Host 标头位于 HTTP 层内部:(

以前,每个 SSL 证书都需要一个 IP 地址。当前的浏览器确实支持 SNI(服务器名称指示),它发送已在 SSL 层内的预期目标主机。看起来 node.js 确实支持这个,寻找SNICallback. 但是,请注意,仍然有足够的库,它们要么根本不支持客户端的 SNI,要么需要显式使用它。但是,只要您只想支持浏览器,这应该没问题。


小智 5

实际上,Redbird可以非常优雅地完成此操作,并且配置也不难。

https://github.com/OptimalBits/redbird


Dov*_* D. 1

如何在不同端口上创建 SSL 服务器并使用 node-http-proxy 作为 443 上的服务器来中继基于域的请求。