nodejs中的转发代理

时间:2012-11-22 12:57:25

标签: node.js http proxy reverse-proxy appfog

我使用nodejs创建了一个小型转发代理,并将其托管在appfog中。 在设置浏览器的代理后,它在本地工作,但当我尝试使用appfog中托管的那个时,它说: * Errore 130(net :: ERR_PROXY_CONNECTION_FAILED):Connessione al服务器代理非riuscita。* 这是我的代码:

var http = require('http');
http.createServer(function(request, response) {
http.get(request.url, function(res) {
  console.log("Got response: " + res.statusCode);
    res.on('data', function(d) {
      response.write(d);
  });
   res.on('end', function() {
     response.end();
    });
}).on('error', function(e) {
  console.log("Got error: " + e.message);
});
}).listen(8080);

我错过了什么吗?

你的代码正在运行,但是一旦我尝试使用它就像这样:

var port = process.env.VCAP_APP_PORT || 8080;
var http = require('http');
var urldec = require('url');
http.createServer(function(request, response) {
var gotourl=urldec.parse(request.url);
var hosturl=gotourl.host;
var pathurl=gotourl.path;
var options = {
    host: hosturl,
    port: 80,
    path: pathurl,
    method: request.method
  };

  http.get(options, function(res) {
    console.log("Got response: " + res.statusCode);
    res.on('data', function(d) {
      response.write(d);
    });
    res.on('end', function() {
      response.end();
    });
  }).on('error', function(e) {
    console.log("Got error: " + e.message);
    response.write("error");
    response.end();
  });
}).listen(port);
console.log(port);

它仍然不起作用:当我尝试ping地址时,我得到了请求超时,我得到了相同的ERR_PROXY_CONNECTION_FAILED ...本地工作但是当我使用远程地址作为代理时它不会

1 个答案:

答案 0 :(得分:2)

首先:该应用需要使用cloudfoundry发给它的端口号。该应用程序位于反向代理后面,该代理接收端口80上的传入请求并将其转发到VCAP_APP_PORT。

var port = process.env.VCAP_APP_PORT || 8080; // 8080 only works on localhost

....

}).listen(port);

然后您可以像这样访问托管应用:

http://<app_name>.<infra>.af.cm  // port 80

您当地的应用:

http://localhost:8080

第二:您可能需要使用选项哈希发送到http.get方法,而不是仅提供request.url。

var options = {
  host: '<host part of url without the protocal prefix>',
  path: '<path part of url>'
  port: 80, 
  method: 'GET' }

我在本地方框和AppFog上测试了以下代码,IP不同。当本地运行时,Whatismyip返回了我的本地互联网IP地址,在AppFog托管应用程序上,它返回了AppFog服务器ip。

var port = process.env.VCAP_APP_PORT || 8080;
var http = require('http');
var options = {
    host: "www.whatismyip.com",
    port: 80,
    path: '/',
    method: 'GET'
  };
http.createServer(function(request, response) {
  http.get(options, function(res) {
    console.log("Got response: " + res.statusCode);
    res.on('data', function(d) {
      response.write(d);
    });
    res.on('end', function() {
      response.end();
    });
  }).on('error', function(e) {
    console.log("Got error: " + e.message);
    response.write("error");
    response.end();
  });
}).listen(port);