Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Https 用于通过ssl提供图像服务的简易反向代理_Https_Gmail_Reverse Proxy_Mixed Content - Fatal编程技术网

Https 用于通过ssl提供图像服务的简易反向代理

Https 用于通过ssl提供图像服务的简易反向代理,https,gmail,reverse-proxy,mixed-content,Https,Gmail,Reverse Proxy,Mixed Content,我创建了一个简单的基于网络的电子邮件客户端,比如gmail。我想显示图像,但为了在ssl站点上显示图像,我需要通过ssl提供所有图像(否则会收到“混合内容”警告)。所以我需要一个像gmail这样的反向代理来服务这些图像 我将重写电子邮件中的所有图像URL,以指向反向代理。例如: 我的反向代理是 原始图像url 我会将url重写为 当反向代理获取请求“”时,它将从查询参数image url()获取原始图像,获取图像,并将其返回给的请求者 有没有现成的服务可以做到这一点?我能写一个简单的吗?是否已经

我创建了一个简单的基于网络的电子邮件客户端,比如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中的代码
  • 通过在项目目录中运行
    npm init
    生成package.json文件
  • 运行
    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锁定它。