node.js node-http-proxy不传递节点模块

时间:2012-11-08 03:15:09

标签: apache node.js http socket.io

我想将/ n /请求传递给node.js,然后将其他所有内容留给端口8080上的Apache。代理在端口80上运行,/ n /的代码在端口9000上。

然而,像socket.io之类的节点内容被破坏了,因为我认为它没有被正确代理 - socket.io查询从apache返回404,如预期的那样:

404 Not Found

未找到

在此服务器上找不到请求的URL /socket.io/socket.io.js.


Apache / 2.2.22(Ubuntu)服务器在localhost端口8080

我的/ n /开始HTML代码:

<!DOCTYPE html>
<html>
<head>
<script src="/socket.io/socket.io.js"></script>

代理:

var app = require('http').createServer(handler);
var io = require('socket.io').listen(app);
var fs = require('fs');
var url = require('url');
var httpProxy = require('http-proxy');
io.set('log level', 1); 
app.listen(9000);

httpProxy.createServer({
router: {
    'localhost/n': '127.0.0.1:9000',
    'localhost': '127.0.0.1:8080'
    }

}).listen(80);

如何让代理通过Node传递socket.io/socket.io.js,而不是Apache?我尝试使用相同的代码来提供我的静态文件(例如css / js),但似乎没有名为socket.io的实际文件夹存在 - 节点似乎重写了它。

1 个答案:

答案 0 :(得分:0)

node.js单独不会做什么apache将开箱即用,以提供静态文件。所以每个url / request / file都需要在路由器中指定。为了让它快速运行,您可以阅读node.js here的快递 或者只是在路由器中指定文件

    router: {
    'localhost/n': '127.0.0.1:9000',
    'localhost': '127.0.0.1:8080',
    '/socket.io/socket.io.js': 'path/to/the/file'
    }