【问题标题】:socket.io.js not found on production instance在生产实例上找不到 socket.io.js
【发布时间】: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


【解决方案1】:

The only difference between development annd Production instance is that, produciton instance runs using nginx proxy but I do not think that should be the problem. 这是一个很大的假设,也是一个错误的假设。

您应该使用 nginx 代理设置开发环境,然后转到生产环境。 nginx 容器需要可以访问所有静态文件,以便它可以切断这些静态文件并且它们不会转到您的 NodeJS 代码

你还需要在你的 nginx 配置中使用以下指令

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;

更多详情请查看https://www.nginx.com/blog/nginx-nodejs-websockets-socketio/

【讨论】:

  • OK..所以现在我将以上几行添加到我的 nginx 中,如下所示:pastebin.com/raw/FJAm6fDT 但现在我收到错误:WebSocket connection to 'wss:/my-host- name/socket.io/?EIO=3&transport=websocket&sid=Ni1NmPNYgC8JuYHvAADa' failed: WebSocket 在连接建立之前关闭。我想我现在已经很接近了,但不确定是什么导致了这个问题
  • pastebin.com/raw/eumXXN37 我在 nginx 日志中看到超时,并且在节点 js 日志中看到多个用户连接消息。
  • 粘贴完整的 nginx 配置
  • 给我 5 分钟.. 目前我是 afk.. 将很快回复
  • 这一切是在 localhost 还是在 docker 内部运行?也使用telnet localhost 5002 看看是否有效?
猜你喜欢
  • 2013-10-22
  • 2012-08-09
  • 1970-01-01
  • 2019-01-26
  • 2019-05-05
  • 1970-01-01
  • 2012-01-31
  • 2012-04-28
  • 2017-07-08
相关资源
最近更新 更多