Node.js http-proxy允许HTTPS

时间:2017-05-12 08:01:42

标签: node.js http-proxy

我有一个创建代理服务器的应用程序,并在访问页面时返回url请求,但它仅适用于http网页,当我尝试访问https地址时,我得到Secure Connection Failed在浏览器中。

要解决此问题,我从herelocalhost:8080生成了自签名证书,但仍然无法访问受保护的网页...

这是我的代码:

var httpProxy = require('http-proxy');
var fs = require('fs');

var proxy = httpProxy.createServer({
  ssl: {
    key:  fs.readFileSync('ssl_key_8080.pem', 'utf8'),
    cert:  fs.readFileSync('ssl_cert_8080.pem', 'utf8')
  },
  target:'https://localhost:8080',
  secure: true
});

proxy.listen(443);

var http = require('http');

http.createServer(function (req, res) {
  var options = {
    target: 'http://' + req.headers.host,
  };
  req.host = req.headers.host;
  proxy.web(req, res, options, function(err){
    console.log('err', err)
  });
}).listen(8080);

proxy.on('proxyReq', function (proxyReq, req, res) {
  console.log('request url', JSON.stringify(req.url, true, 2));
});

我有什么不对的吗?我按照http-proxy docs

的说明进行操作

1 个答案:

答案 0 :(得分:1)

问题是您有一个自签名证书,并且您正在使用代理设置对象中的安全标记,来自文档

  

您可以激活对安全SSL证书的验证   目标连接(避免自签名证书),只需设置secure:true即可   选项。

sapply(split(df1[,-1], df1$venue), function(x) length(unique(x[!is.na(x)])))
# A B C 
# 2 5 2 

如果删除安全标记,则浏览器可能会收到路径不安全的错误。

在您的代码的上下文中。

    var proxy = httpProxy.createServer({
  ssl: {
    key:  fs.readFileSync('ssl_key_8080.pem', 'utf8'),
    cert:  fs.readFileSync('ssl_cert_8080.pem', 'utf8')
  },
  target:'https://localhost:8080',
  secure: true
});