3

我用 nodejs 制作了一个小型转发代理并将其托管在 appfog 中。它在设置我的浏览器的代理后在本地工作,但是当我尝试使用托管在 appfog 中的代理时,它说:*Errore 130 (net::ERR_PROXY_CONNECTION_FAILED): Connessione al server proxy non 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 ... 本地工作但是当我使用远程地址作为代理时它没有

4

1 回答 1

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);
于 2012-11-22T17:40:53.427 回答