0

我设置了一个 node-http-proxy 来将 site/n 请求转发到 node.js(在端口 9000),并将其他请求转发到 apache(端口 8000)。这是因为我大量使用 socket.io,并且我不希望 apache 为每个 websocket 请求创建一个线程。

以下代码效果很好,直到我想通过我的公共 IP 访问它。一切正常,除了一件事 - my_public_ip/n/socket.io/socket.io/js 返回“404 Not Found”。似乎这个请求并没有被 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);
        });
    }
}
4

1 回答 1

0

节点 http 服务器正在为 socket.IO 提供客户端脚本。发生的事情是,因为您没有将 http 流量代理到 node.JS,所以您无法看到客户端 JS 脚本。(Socket.IO 不会通过 socket.IO 连接推送 JS 脚本。)

最基本的解决方法是在 Apache 服务器上创建 JS 脚本的副本。另一种方法是通过仅为脚本路径添加额外的路由指令来将请求路由到 Node.JS。我认为前者会给你更好的表现。

于 2012-12-10T22:54:00.530 回答