node.js автоматически не передает библиотеку JS при наличии http-прокси

У меня есть 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);
        });
    }
}

1 ответ

Решение

Сервер http узла обслуживает клиентский скрипт для socket.IO. Происходит то, что, поскольку вы не передаете http-трафик на node.JS, вы не сможете увидеть клиентский JS-скрипт. (Socket.IO не проталкивает JS-скрипт через соединение socket.IO.)

Самым простым решением является создание копии JS-скрипта на вашем сервере Apache. Другой способ - направить запрос в Node.JS, добавив дополнительную инструкцию маршрутизации только для пути к сценарию. Я думаю, что первый даст вам лучшую производительность.

Другие вопросы по тегам