Https 用于通过ssl提供图像服务的简易反向代理
我创建了一个简单的基于网络的电子邮件客户端,比如gmail。我想显示图像,但为了在ssl站点上显示图像,我需要通过ssl提供所有图像(否则会收到“混合内容”警告)。所以我需要一个像gmail这样的反向代理来服务这些图像 我将重写电子邮件中的所有图像URL,以指向反向代理。例如: 我的反向代理是 原始图像url 我会将url重写为 当反向代理获取请求“”时,它将从查询参数image url()获取原始图像,获取图像,并将其返回给的请求者 有没有现成的服务可以做到这一点?我能写一个简单的吗?是否已经有任何库或解决方案可以安装在某个地方Https 用于通过ssl提供图像服务的简易反向代理,https,gmail,reverse-proxy,mixed-content,Https,Gmail,Reverse Proxy,Mixed Content,我创建了一个简单的基于网络的电子邮件客户端,比如gmail。我想显示图像,但为了在ssl站点上显示图像,我需要通过ssl提供所有图像(否则会收到“混合内容”警告)。所以我需要一个像gmail这样的反向代理来服务这些图像 我将重写电子邮件中的所有图像URL,以指向反向代理。例如: 我的反向代理是 原始图像url 我会将url重写为 当反向代理获取请求“”时,它将从查询参数image url()获取原始图像,获取图像,并将其返回给的请求者 有没有现成的服务可以做到这一点?我能写一个简单的吗?是否已经
我对任何语言和平台都持开放态度……我只想解决这个问题。如果您没有任何自签名证书,下面介绍如何创建自签名证书 现在看一下node.js中编写的代码: …还有一张截图:)
我建议使用与都铎相同的方法:在node中编写代理 但是,我建议使用更广泛使用和测试的库,例如。它的设置非常简单,只需不到20行代码即可实现所需的功能
var httpProxy = require('http-proxy')
httpProxy.createServer({
target: {
host: 'stuff.com',
port: 80
},
ssl: {
key: fs.readFileSync('./ssl-key.pem', 'utf8'),
cert: fs.readFileSync('./ssl-cert.pem', 'utf8')
}
}).listen(443);
如果客户端随后访问,则过程如下
在这个模式中,我假设反向代理在不同的服务器上运行,作为提供图像的Web服务器,但情况并非如此。如果它们都在同一台服务器上运行,只需在target
部分中使用host:'localhost'
--
以防您不熟悉Node,以下是快速运行此设置所需执行的操作
- 安装节点
- 创建一个新文件,其中包含yourprojectpath/index.js中的代码
- 通过在项目目录中运行
生成package.json文件npm init
- 运行
以安装npm安装--保存http代理
库,并能够在代码中使用它http代理
node index.js
如果您计划在生产中使用此功能,我强烈建议您查看。它是一个用于节点的流程管理器,基本上可以确保应用程序始终运行,无论发生什么情况。特别是,如果应用程序抛出任何类型的异常并导致其终止,它将重新启动它
安装:
npm install -g pm2
用法:
pm2 start index.js
还有几点注意:
- 确保您的
文件具有适当的权限和所有者.pem
通常是一个不错的选择(只有所有者可读)。不过,运行节点应用程序的用户应该能够读取它们chmod 400
- 如果您的服务器运行在(软件或硬件)防火墙之后,您可能需要打开端口443以接收传入流量
- 根据SSL证书提供商的不同,您可能需要将它提供给您的文件转换为PEM格式
- 如果需要,节点http代理支持在代理请求时添加头
- 我在上面介绍的脚本假设您在与其相同的目录中有
和ssl key.pem
ssl-cert.pem
希望有帮助!只要问问你是否觉得有些事情不清楚就可以用nginx轻松完成。顺便说一句,它可以按照你的要求来做,也可以使url和源url完全相同。例如cdn.xxx.com/img.jpg-www.xxx.com/img.jpg。Richard,您可以通过在nginx配置文件中启用CORS轻松解决混合内容的问题,下面是一个示例。在这里,所有人都可以使用cors,您可以为特定域或ip设置cors,您需要查看更多详细信息。谢谢!我们已经购买了证书,需要为这个子域再购买一个证书。那么该代码是在节点中编写的https代理?哇…我要看一看!非常感谢。“在这个模式中,我假设反向代理与提供图像的Web服务器在不同的服务器上运行”是的,就是这样。事实上,这些图片将来自网络上的所有地方。我使用反向代理通过https检索http托管的图像,这样我的web电子邮件客户端就不会抱怨混合内容(请参阅我的问题)。这还能用吗?我计划在azure中托管它…任何我应该知道的问题或事情?仅供参考,您可以设置一个web服务器,例如Apache或nginx作为反向代理。如果您需要更多灵活性,请使用HAProxy。所有这些的指南都很容易找到。将它们与应用程序分开运行,并添加会话/令牌身份验证以确保安全。请注意,您可能会考虑将图像嵌入电子邮件中,而不是使用图像服务器,大多数电子邮件客户端(如果不是全部的话)默认情况下都会阻止图像链接,除非收据将发件人列入白名单。此外,如果电子邮件发送给外部各方,如果他们多次阅读电子邮件,这种方法将节省您的带宽成本。谢谢@Hang。这仅适用于收到的电子邮件(源自我的系统之外)。当我们发送电子邮件时,我们会将图像URL交换回原始URL,这样外部就不会有人点击我们的反向代理。事实上,我们将通过IP锁定它。