我创建了一个简单的基于Web的电子邮件客户端,如gmail。我想要显示图像,但为了使用我的ssl网站,我需要在ssl上提供所有图像(否则我会收到“混合内容”警告)。所以我需要一个像gmail这样的反向代理来提供这些图像。
我将重写电子邮件中的所有图片网址以指向反向代理。例如:
我的反向代理是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)获取原始图像,获取图像,并将其返回给{的请求者{3}}
是否有任何服务可以开箱即用?我可以写一个简单的吗?是否已经有任何库或解决方案,我可以安装在某个地方?
我对任何语言和任何平台都持开放态度......我只想解决这个问题。
答案 0 :(得分: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);
如果客户端随后访问 https://reverseproxy.com/image.png ,则流程如下:
我假设在这个模式中,反向代理在不同的服务器上运行,作为服务于图像的Web服务器,但不一定是这种情况。如果它们都在同一台服务器上运行,只需在host: 'localhost'
部分使用target
。
-
如果您不熟悉Node,请按以下步骤快速运行此设置。
npm init
生成package.json文件npm install --save http-proxy
以安装http-proxy
库并能够在代码中使用它您现在应该可以通过运行
来运行反向代理node index.js
如果您打算在制作中使用此功能,我强烈建议您查看PM2。它是节点的流程管理器,无论如何,它基本上确保您的应用程序始终运行。特别是,如果从应用程序抛出任何类型的异常并导致它终止,它将重新启动它。
安装:
npm install -g pm2
用法:
pm2 start index.js
还有一些说明:
.pem
文件具有适当的权限和所有者。 chmod 400
通常是一个不错的选择(只有所有者可读)。但是,运行Node应用程序的用户应该能够读取它们。ssl-key.pem
所在的目录中希望有所帮助!并且问一下你看起来不清楚的事情
答案 1 :(得分:2)
答案 2 :(得分:0)
使用nginx可以轻松完成。顺便说一句,它可以像你问的那样完成,也可以使url与原始url完全相同。例如cdn.xxx.com/img.jpg - www.xxx.com/img.jpg。
答案 3 :(得分:0)
Richard,您可以通过在nginx配置文件中启用CORS轻松解决混合内容的问题,这是一个示例http://enable-cors.org/server_nginx.html。在这种情况下,每个人都可以使用,你可以设置特定的域名或IP,你需要查看更多细节。