【问题标题】:node.js node-http-proxy not passing node modulesnode.js node-http-proxy 没有传递节点模块
【发布时间】:2012-10-28 05:23:58
【问题描述】:

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

但是,socket.io 之类的节点内容已损坏,因为我认为它的代理不正确 - socket.io 查询从 apache 返回 404,如预期:

404 未找到

未找到

在此服务器上找不到请求的 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);

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

【问题讨论】:

    标签: apache node.js http socket.io


    【解决方案1】:

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

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

    【讨论】:

    • 文件路径应该放在哪里?我看不到socket.io js在哪里。
    • 问题是socket.io不是文件而是节点模块
    猜你喜欢
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 2018-09-25
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多