我想将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错误。我做错了什么?
更新:我在下面发布了一个似乎对我有用的答案。我现在只测试了几分钟,所以请随时查看,以防万一你发现任何会导致我遇到问题的事情。
答案 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主机文件。这些都不适合我。也许有一些我想念的东西?