我有一个nodejs服务器,可以在同一端口上为http和websocket提供服务。该设置在localhost上运行良好,但当部署在Amazon Beanstalk(它有一个负载均衡器和nginx)上时,ws客户端在建立ws连接时会抛出一个错误:"意外响应代码200"。我不能100%确定这一点,但我认为这是因为nodejs服务器不知何故将ws握手请求错误为http请求,因此返回200。这是我的服务器的代码:
var WebSocketServer = require('websocket').server;
var http = require('http');
var fs = require('fs');
var indexPage = "Loading index page, try again later?";
fs.readFile('./index.html',function (err,data){
indexPage = data;
})
var server = http.createServer(function(request, response) {
});
server.listen(1337, function() { });
// create the server
wsServer = new WebSocketServer({
httpServer: server
});
// WebSocket server
wsServer.on('request', function(request) {
console.dir(request);
var connection = request.accept(null, request.origin);
console.log("connected");
connection.on('message', function(message) {
if (message.type === 'utf8') {
console.log("Received",message.utf8Data);
}
});
connection.on('close', function(connection) {
});
});
有什么建议吗?在这种情况下,我应该如何配置nginx和负载均衡器?
通常在node.js托管服务上,它们提供一个环境变量,该变量在每次启动应用程序时都会动态创建-这是典型的:
var port = process.env.PORT || 1337;
然后当在没有env-var的情况下在本地启动时,它只使用您最喜欢的1337