我有一个可以创建代理服务器并在访问页面时返回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的指示

最佳答案

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


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


    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
});


如果删除安全标志,则可能会在浏览器中收到一条错误消息,指出该路由不安全。

在您的代码的上下文中。

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'
});

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));
});

10-05 20:52
查看更多