通过ssl提供图像的简易反向代理

ric*_*ard 5 https gmail reverse-proxy mixed-content

我创建了一个简单的基于Web的电子邮件客户端,如gmail.我想要显示图像,但为了使用我的ssl网站,我需要在ssl上提供所有图像(否则我会收到"混合内容"警告).所以我需要像gmail这样的反向代理来提供这些图像.

我将重写电子邮件中的所有图像URL以指向反向代理.例如:

我的反向代理是https://myreverseproxy.com

原始图片网址http://stuff.com/image1.jpg

我将重写网址为https://myreverseproxy.com?image-url=http://stuff.com/image1.jpg

当反向代理获得请求" https://myreverseproxy.com?image-url=http://stuff.com/image1.jpg "时,它将从查询参数image-url获取原始图像(http:// stuff.com/image1.jpg),获取图像,并将其返回给https://myreverseproxy.com?image-url=http://stuff.com/image1.jpg的请求者.

是否有任何服务可以开箱即用?我可以写一个简单的吗?我是否已经为此安装了任何库或解决方案?

我对任何语言和任何平台都持开放态度......我只想解决这个问题.

chr*_*etd 10

我建议像Tudor一样:在节点中编写的代理.

但是,我建议使用更广泛使用和测试的库,例如node-http-proxy.这是真的简单的设置,并且将实现你在不到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);
Run Code Online (Sandbox Code Playgroud)

如果客户端随后访问https://reverseproxy.com/image.png,则该过程将如下所示

在此输入图像描述

我假设在这个模式中,反向代理在不同的服务器上运行,作为服务于映像的Web服务器,但不一定是这种情况.如果它们都在同一台服务器上运行,只需host: 'localhost'在该target部分中使用即可.

-

如果您不熟悉Node,请执行以下操作以快速运行此设置.

  • 安装节点
  • 创建一个包含projectproject/index.js中代码的新文件
  • 通过npm init在项目的目录中运行来生成package.json文件
  • 运行npm install --save http-proxy以安装http-proxy库并能够在代码中使用它

您现在应该可以通过运行来运行反向代理

node index.js
Run Code Online (Sandbox Code Playgroud)

如果您打算在生产中使用它,我强烈建议您查看PM2.它是节点的流程管理器,它基本上确保您的应用程序始终在运行,无论如何.特别是,如果从应用程序抛出任何类型的异常并导致它终止,它将重新启动它.

安装:

npm install -g pm2
Run Code Online (Sandbox Code Playgroud)

用法:

pm2 start index.js
Run Code Online (Sandbox Code Playgroud)

还有一些说明:

  • 确保您的.pem文件具有适当的权限和所有者.chmod 400通常是一个很好的选择(只有所有者可读).但是,运行Node应用程序的用户应该能够读取它们.
  • 如果您的服务器在(软件或硬件)防火墙后运行,您可能需要打开端口443以接收传入流量
  • 根据您的SSL证书提供商,您可能需要将它将为您提供的文件转换为PEM格式
  • 如果需要,node-http-proxy支持其他选项,例如在代理请求时添加标头
  • 我上面提到的脚本假设你拥有ssl-key.pemssl-cert.pem在同一目录中

希望有所帮助!只是问一下你看起来不清楚的事情