使用nodejs将http请求从远程服务器重定向到本地服务器

pra*_*n64 5 remote-server node.js charles-proxy

名为charles的工具中有一个功能,允许您映射远程请求:

http://www.charlesproxy.com/documentation/tools/map-remote/

基本上,它可以向服务器发送任何请求(即使您不是运行它的人),然后向另一个服务器发出新请求,保留路径和查询字符串.然后来自第二服务器的响应将覆盖来自第一服务器的响应.

我只是想知道是否有一个节点模块可以做到这一点.我尝试使用http-proxy,但我觉得这个地图远程工具与代理有点不同,因为看起来你必须拥有两个带代理的服务器.

编辑:再次尝试使用http代理节点模块,但似乎无法让它工作.这是我的代码:

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

httpProxy.createServer({
    hostnameOnly: true,
    router: {
        'www.stackoverflow.com': 'localhost:9000',
    }
}).listen(80);

// Create your target server
//
http.createServer(function (req, res) {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.write('request successfully proxied!' + '\n' + JSON.stringify(req.headers, true, 2));
  res.end();
}).listen(9000);
Run Code Online (Sandbox Code Playgroud)

我的期望是,当我访问www.stackoverflow.com或www.stackoverflow.com:80时,它将改为重定向到我的localhost:9000

Bra*_*rad 4

不,您要求的确实是一个简单的代理。不,您不必“拥有”两台服务器来运行代理。您只需代理该请求,此时您可以根据需要修改数据。

您提到的代理模块可以正常工作,还有很多其他模块。如果您愿意,您也可以使用简单的 Nginx 配置来完成此操作。

  • @prashn64 不,只是一个代理服务器。事实上,“反向代理”一词几乎毫无意义。通常,当您将代理服务器放置在服务器旁边以实现负载平衡(除其他外)时,会使用该术语。不过,这只是一个代理服务器。您已经为您的问题添加了更多信息...您是否设置了一个主机文件条目,将“www.stackoverflow.com”指向您的 Node.js 服务器拥有的任何 IP? (4认同)