node.js - 在生产实例上找不到socket.io.js

标签 node.js sockets express nginx socket.io

首先,是的,我知道类似问题也有许多与SO相关的问题。在询问之前,我已经经历了几乎所有这些问题。

我有一个非常奇怪的问题,在生产实例上服务器不提供socket.io.js文件。

完全相同的代码可用于我的开发实例。开发实例和生产实例之间的唯一区别是,生产实例使用nginx代理运行,但我认为这不是问题。

当我尝试访问https://my-host-name.com/socket.io/socket.io.js

我收到错误“404未找到”

Nginx日志给出此错误:

2017/08/17 12:01:28 [error] 30437#0: *2298619 open() "/data/api/current/socket.io/socket.io.js" failed (2: No such file or directory), client: 10.xxx.x.xx, server: , request: "GET /socket.io/socket.io.js HTTP/1.1", host: ""



我完全不知道这里出了什么问题。谁能帮帮我吗?

这是我对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

最佳答案

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/

关于node.js - 在生产实例上找不到socket.io.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45743360/

相关文章:

node.js - POST 请求发送两次到 Express 路由之间有一定的延迟

python - 如何创建一个监听文件描述符的 Python 套接字服务器?

node.js - 在服务器端 NodeJS Application Insights 事件中添加经过身份验证的用户 ID 信息

node.js - 从异步 Mongoose 聚合返回值

c++ - 服务器使用accept()接受连接后出现的问题

perl - 在 Perl 中正确使用 IO::Socket::INET 作为 TCP 客户端

node.js - typescript node.js 快速路由分隔文件最佳实践

javascript - 如何在 node + express 中重新运行请求处理程序?

node.js - 使用 Alexa 计数

java - JButton双击出现新线程,为什么会出现这种情况