I want to execute a simple node-http-proxy example on phusion passenger with nginx. You can find this example code on https://github.com/nodejitsu/node-http-proxy.
var http = require('http'),
httpProxy = require('http-proxy');
//
// Create your proxy server
//
httpProxy.createServer(9000, 'localhost').listen(8000);
//
// 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);
If I execute this code, I get the following error.
App 28096 stderr: /usr/share/passenger/helper-scripts/node-loader.js:157
App 28096 stderr: throw new Error("http.Server.listen() was called more than once, which " +
App 28096 stderr: ^
App 28096 stderr: Error: http.Server.listen() was called more than once, which is not allowed because Phusion Passenger is in auto-install mode. This means that the first http.Server object for which listen() is called, is automatically installed as the Phusion Passenger request handler. If you want to create and listen on multiple http.Server object then you should disable auto-install mode.
Than I find a post on google groups https://groups.google.com/forum/#!topic/phusion-passenger/sZ4SjU8ypwc and add
PhusionPassenger.configure({ autoInstall: false });
before I call the first time "createServer(...).listen(port)".
The next step was to replace the value of the port parameter of the listen-method with the value 'passenger'. But I have no success. Has anybody managed to get this to run?
--- My solution ---
Thank you Hongli for the advice "Next, you need to modify one (and only one) invocation ...". This solved my problem.
var http = require('http'),
httpProxy = require('http-proxy');
if (typeof(PhusionPassenger) != 'undefined') {
PhusionPassenger.configure({ autoInstall: false });
}
httpProxy.createServer(9000, 'localhost').listen('passenger');
var 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);