我使用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 ...本地工作但是当我使用远程地址作为代理时它不会
答案 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);