生产实例

时间:2017-08-17 19:18:30

标签: node.js sockets express nginx socket.io

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

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

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

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

我收到错误“404 Not Found”

Nginx日志会出现此错误:

  

2017/08/17 12:01:28 [错误] 30437#0:* 2298619 open()   “/data/api/current/socket.io/socket.io.js”失败(2:没有这样的文件或   目录),客户端: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-adapter,socket.io-client和socket.io-parser

1 个答案:

答案 0 :(得分: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/

,请参阅此处