site / nリクエストをnode.js(ポート9000)に転送し、その他のリクエストをapache(ポート8000)に転送するようにnode-http-proxyを設定しています。これは、socket.ioを多用しており、apacheがwebsocketリクエストごとに1つのスレッドを作成することを望まないためです。
次のコードは、パブリックIPを介してアクセスできるようにするまではうまく機能します。my_public_ip / n / socket.io / socket.io /jsは「404NotFound」を返しますが、1つを除いてすべてが機能します。このリクエストはnode.jsによって黙って吸収されていないようです
httpProxy.createServer({
router: {
'localhost/n/': '127.0.0.1:9000',
'localhost': '127.0.0.1:8000',
'my_public_ip/n': '127.0.0.1:9000',
'my_public_ip': '127.0.0.1:8000'
}
}).listen(80);
function handler(req, res) {
var pathName = url.parse(req.url).pathname;
if(pathName.substr(0,2) == "//"){
pathName = pathName.substr(1);
}
var pathSplit = pathName.split('/');
nextURL = pathSplit.join('/').substr(8);
if(pathSplit[1] == 'static'){
fs.readFile(__dirname + '/static/' + nextURL, function(err, data) {
if(err) {
res.writeHead(404);
return res.end('404 Not Found');
}
res.writeHead(200);
res.end(data);
});
} else if(pathName !== '/'){
fs.readFile(__dirname + '/index.html', function(err, data) {
if(err) {
res.writeHead(500);
return res.end('Error loading file. Does it exist? (Reading ' + __dirname + ')');
}
res.writeHead(200);
res.end(data);
});
}
}