代码之家  ›  专栏  ›  技术社区  ›  Ayush Goel

使用节点http代理转发http代理

  •  3
  • Ayush Goel  · 技术社区  · 7 年前

    我正在使用节点http代理库创建一个转发代理服务器。 我最终计划使用一些中间件动态修改html代码。 这就是我的代理服务器代码的样子

    var  httpProxy = require('http-proxy')
    httpProxy.createServer(function(req, res, proxy) {
      var urlObj = url.parse(req.url);
      console.log("actually proxying requests")
      req.headers.host  = urlObj.host;
      req.url           = urlObj.path;
    
      proxy.proxyRequest(req, res, {
        host    : urlObj.host,
        port    : 80,
        enable  : { xforward: true }
      });
    }).listen(9000, function () {
      console.log("Waiting for requests...");
    });
    

    现在我修改了chrome的代理设置,并将web代理服务器地址启用为localhost:9000

    然而,每次我访问一个普通的http网站,我的服务器就会崩溃 "Error: Must provide a proper URL as target"

    我是nodejs的新手,我不完全明白我在这里做错了什么?

    1 回复  |  直到 7 年前
        1
  •  8
  •   robertklep    7 年前

    要使用动态目标,您应该创建一个常规HTTP服务器,该服务器使用一个代理实例,您可以为其动态设置目标(基于传入的请求)。

    裸体转发代理:

    const http      = require('http');
    const httpProxy = require('http-proxy');
    const proxy     = httpProxy.createProxyServer({});
    
    http.createServer(function(req, res) {
      proxy.web(req, res, { target: req.url });
    }).listen(9000, () => {
      console.log("Waiting for requests...");
    });