【发布时间】:2018-01-26 08:32:24
【问题描述】:
首先,是的,我知道对于类似的问题有很多关于 SO 的相关问题。在问之前我几乎都经历过。
我有一个非常奇怪的问题,生产实例上的服务器不提供 socket.io.js 文件。
完全相同的代码适用于我的开发实例。开发实例和生产实例之间的唯一区别是,生产实例使用 nginx 代理运行,但我认为这不是问题。
当我尝试访问https://my-host-name.com/socket.io/socket.io.js时
我收到错误“404 未找到”
Nginx 日志给出这个错误:
2017/08/17 12:01:28 [错误] 30437#0: *2298619 open() “/data/api/current/socket.io/socket.io.js”失败(2:没有这样的文件或 目录),客户端:10.xxx.x.xx,服务器:,请求:“GET /socket.io/socket.io.js HTTP/1.1",主机:""
我完全不知道这里出了什么问题。谁能帮帮我?
这是我在 app.js 文件上的套接字配置:
var server = https.createServer(app.get("httpsOptions"), app);
var socket = require('socket.io');
var io = socket.listen(server);
server.listen(app.get('port'), function(){
logger.info("Starting the express app...");
logger.info("Express server listening on port " + app.get('port'));
});
require('./routes/sockets/base')(io); // separating the socket.io related code in separate file
我可以看到我的 node_modules 已经有 socket.io、socket.io-adaptor、socket.io-client 和 socket.io-parser
【问题讨论】:
-
您需要对 socket.io.js 的请求才能通过 NGINX 到达您的快速服务器(而不是 NGINX 尝试直接为其提供服务器),并且您需要将它连接到您的快速服务器的路径
/socket.io/socket.io.js。这似乎是一个 NGINX 配置问题,并且看起来可能有某种多租户 NGINX 配置也将/data/api/current添加到路径中。 -
我尝试查看 nginx conf,并在其中添加了以下行: alias /socket.io/{ alias /data/api/current/node/node_modules/socket.io-client/dist/}现在我可以看到通过此链接提供的 socket.io.js 文件:my-host-name.com/socket.io/socket.io.js 但是所有轮询都失败并出现 403 禁止错误:这里是 nginx 日志:“/data/api/current/node/node_modules/socket 的目录索引” .io-client/dist//" 被禁止,
标签: node.js sockets express nginx socket.io