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

2024-01-01

我正在尝试在 NodeJS 中创建反向代理。但我一直遇到这样的问题:即使我想为多个域提供服务,我也只能在同一端口(443)上提供一组证书/密钥对。我已经完成了研究并不断遇到同样的障碍:

  • 可以从非安全本地源(http 本地访问和服务 https 公共)为多个域安全域提供服务的节点脚本
  • 让我通过域标头动态服务器 SSL 证书
  • Example:
    • https://www.someplace.com:443 将从 http://thisipaddress:8000 提取并使用 www.someplace.com 的证书和密钥文件
    • https://www.anotherplace.com:443 将从 http://thisipaddress:8080 提取并使用 www.anotherplace.com 的证书和密钥文件
    • ect.
  • I have looked at using NodeJS's https.createServer(options, [requestListener])
    • 但此方法仅支持每个端口一个证书/密钥对
    • 我找不到根据域标头动态切换证书的方法
    • 我无法要求我的员工使用自定义 https 端口
    • 如果我为多个域名提供相同的 SSL 证书,即使它是安全的,我也会遇到浏览 SSL 证书错误
  • 我在看节点 http 代理但据我所知它也有同样的局限性
  • 我研究了 Apache mod-proxy 和 nginx,但我宁愿拥有一些我可以更直接控制的东西

如果有人可以向我展示一个使用 NodeJS 为多个安全域提供服务的示例,每个安全域都有来自同一端口号 (443) 的自己的证书https.createServer or 节点 http 代理我会感激你的。


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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 将 Unicode 从 R 写入 SQL Server

    我正在尝试将 Unicode 字符串从 R 写入 SQL 然后使用该 SQL 表来支持 Power BI 仪表板 不幸的是 Unicode 字符似乎仅在我将表加载回 R 时才起作用 而当我在 SSMS 或 Power BI 中查看表时则不起
  • 查找并删除目录及其子目录中的空文件而无需查找

    我正在尝试制作一个 bash 脚本 在不使用 find 命令的情况下查找并删除目录 包括子目录 中的空文件 这是使用 find 命令的脚本的一部分 但我不确定如何在不使用 find 的情况下转换此行 find type f empty de
  • 如何在 SQL 查询中 JOIN 父级的类别表?

    我有一个帖子表 id category id 然后JOIN其类别表为 category id category name parent ONcategory id Parent是另一个类别的category id 例如 category i
  • 如何获取 rq 队列中的作业数量?

    我用过rq http python rq org 和 RedisToGo 如何获取队列中的作业数量 我在文档中找不到它 Python 当我尝试时 print Before len q jobs result q enqueue worker
  • 如何备份SVN仓库? [复制]

    这个问题在这里已经有答案了 我经常听说拥有 SVN 存储库并不能消除备份的需要 这样的备份是如何完成的呢 我的意思是存储库会随着时间的推移而膨胀 不是吗 那么我是否每次都将其作为一个整体进行备份 或者我该怎么做 进行此类备份的最简单方法是什
  • 德墨忒尔定律 - 数据对象

    我试图遵循德米特法则 参见http en wikipedia org wiki Law of Demeter http en wikipedia org wiki Law of Demeter http misko hevery com c
  • Google Maps Javascript API 不响应 iOS 10 中的触摸事件

    我运行一个内置了许多自定义 Google 地图的网站 在搜索或生成往返某个位置的路线后在地图上显示各个位置 我为此使用 Google Maps Javascript API 我的用户开始报告说 在 iOS 10 上 这些地图不再响应触摸事件
  • 表字段中未显示验证图标

    当我进入表格的编辑模式时 我希望在用户超出任何验证约束范围时立即显示数据验证感叹号图标 首先 有几点注意事项 我使用的是 Vaadin 7 所以 Bean Validation 插件很遗憾无法工作 数据验证按预期进行 现在 我有一个完美的工
  • 是否可以在node.js的帮助下在Windows中将JSLint作为命令行运行?

    我的意思是像这样运行它 node exe lint js my js file js 然后将输出输出到控制台 我需要下载什么 我只需要保存吗http www jslint com 到磁盘 然后获取一些附加的 js 文件 或者我需要寻找 no
  • 如何将触摸从 UIView 传递到 UIScrollView

    如同这个线程 https stackoverflow com questions 5186479 passing swipe touches from uiview to underlying uiscrollview for proper
  • 构建 GDAL 时链接器错误

    我正在使用 MSVC 2015 64 位命令提示符从源代码构建 GDAL 我使用的是 Windows 8 在构建过程中 我收到以下错误 Creating library gdal i lib and object gdal i exp od
  • 如何让 Swagger UI 与 Swashbuckle 一起使用端口 443?

    在运行 RESTful Web 服务的 QA 和 Prod 环境中 端口 80 未开放 因此 目前当我尝试在 QA 中访问 Swagger UI 时 我收到此消息 但它只是挂起 fetching resource list http qa
  • JSon.NET 反序列化子项

    对于反序列化 我通常使用与 JSon 和中找到的属性名称相同的对象JsonConvert DeserializeObject
  • AngularJS工厂http返回空

    我是第一次尝试 AngularJS 我正在使用工厂从 http get 请求获取 JSON 数据 但在 ajax 请求完成之前 该对象返回为空 Factory myDemo factory photosFactory function ht
  • AWS API网关代理响应失败/丢弃

    Problem 使用 Postman 时 AWS API Gateway 代理不会传回我的后端服务的响应 但适用于curl 描述 我有一个想要通过 AWS API 网关公开的后端服务 在这种情况下 网关的使用纯粹是作为 HTTP 代理 所以
  • 是否可以在 gridview 的单元格中滚动?

    我的网格视图中有一些记录 但每条记录都存在一个问题 有一个单元格包含大量数据 我仍然想显示数据并允许用户向下滚动阅读 如果他们感兴趣 是否有可能允许在该单元格中滚动 EDIT 这是我参考的css AspNet GridView overfl
  • 为什么 -drawRect 比使用 CALayers/UIViews 用于 UITableViews 更快?

    我已经能听到一千名 iOS 开发者内心的痛苦 不 我不是菜鸟 为什么 UITableView 的 drawRect 性能比多个视图更快 据我所知 合成操作是在 GPU 上进行的 但合成是一种一次性操作 一旦这些层被提交到内存中 它就与缓存缓
  • 在 ASP.Net Ajax Async-Postback without JQuery 之后滚动到页面顶部

    我需要在更新面板中的异步回发后滚动到页面顶部 我尝试了几种方法 虽然它们都滚动到页面顶部 但它们都被 ASP Net Ajax 覆盖 从而将页面返回到发生回发时的位置 我已经在页面指令中设置MaintainScrollPositionOnP
  • 重用Android锁定模式

    我正在编写一个应用程序 应该用密码保护它 是否可以从具有不同图案的应用程序中使用 Android 的图案锁屏 而不是构建一个新的锁屏 首先 您必须通过手动设置来设置图案锁定 然后您可以使用下面的代码接收事件 import android a
  • 在 NodeJS 中创建可以处理多个安全域的反向代理

    我正在尝试在 NodeJS 中创建反向代理 但我一直遇到这样的问题 即使我想为多个域提供服务 我也只能在同一端口 443 上提供一组证书 密钥对 我已经完成了研究并不断遇到同样的障碍 可以从非安全本地源 http 本地访问和服务 https