将Apache子目录重定向到Node.js

时间:2017-10-10 18:13:33

标签: node.js apache socket.io

我想将Apache子目录重定向到Node.js应用程序。我在我的常规域的Apache VirtualHost .conf文件中添加了以下内容:

<VirtualHost *:80>

    # Already existing Apache lines here removed to keep this post short

    # The following are all the new lines I have added

    ProxyRequests Off
    ProxyPreserveHost On
    ProxyVia Full
    <Proxy *>
        Require all granted
    </Proxy>

    <Location /mysubdir>
        ProxyPass http://127.0.0.1:3000
        ProxyPassReverse http://127.0.0.1:3000
    </Location>
</VirtualHost>

但是,现在尝试通过http://example.com/subdirname连接到我的网站时,socket.io收到404错误。

在我的app.js中,我有以下内容:

var express = require('express'),
    app = express(),
    server = require('http').createServer(app),
    io = require('socket.io').listen(server);

基于另一个stackoverflow帖子,我将app.js更改为:

var express = require('express'),
    app = express(),
    server = require('http').createServer(app),
    io = require('socket.io')(server, {path: '/mysubdir/socket.io'}).listen(server);

但它仍然给我404错误。我做错了什么?

更新:我在下面发布了一个似乎对我有用的答案。我现在只测试了几分钟,所以请随时查看,以防万一你发现任何会导致我遇到问题的事情。

1 个答案:

答案 0 :(得分:0)

我发现我不需要对我的app.js进行任何修改,只能修改我的HTML代码。所以要解决,我将app.js恢复为:

var express = require('express'),
    app = express(),
    server = require('http').createServer(app),
    io = require('socket.io').listen(server);

并在我的html代码中修改了以下几行:

我改变了:

<script type="text/javascript" src="/socket.io/socket.io.js"></script>

要:

<script type="text/javascript" src="/mysubdir/socket.io/socket.io.js"></script>

我也改变了:

var socket = io.connect();

要:

var socket = io.connect('http://example.com:3000');

现在似乎一切都按照应有的方式运作。然而,有趣的是,我需要改变的只是客户端。我发现的大多数其他示例要么需要更改服务器端应用程序,要么将重定向添加到Apache主机文件。这些都不适合我。也许有一些我想念的东西?