【发布时间】:2016-10-08 11:37:56
【问题描述】:
我正在 AWS Elastic Beanstalk 上运行 socket.io node.js 应用程序。我没有包含 express.js。
显然,Elastic Beanstalk 上的 Nginx 代理在没有手动配置的情况下不会传递 TCP 连接。
我正在尝试通过我的 Android 客户端或浏览器连接到它。
我已经尝试了互联网上的所有解决方案,但我得到 502 Bad gateway 或超时错误。
我是否应该将 AWS Elastic Beanstalk 负载均衡器更改为接受 TCP 而不是 HTTP?
我的 node.js 应用正在侦听端口 3000(硬编码)。在本地主机上运行良好。
var server = require('http').createServer(handleRequest);
var io = require('socket.io')(server);
function handleRequest(request, response)
{
response.end('It Works!! Path Hit: ' + request.url);
}
io.on('connection', function (socket)
{
console.log('a user connected');
socket.on('disconnect', function ()
{
console.log('user disconnected');
});
socket.on('chat message', function (msg)
{
console.log('message received on server: ' + msg);
io.emit('chat message', msg);
});
});
server.listen(3000, function ()
{
console.log("Server listening on port:", 3000); //Callback triggered when server is successfully listening. Hurray!
});
这是我的 package.json
{
"name": "qurba-messaging-backend",
"version": "0.0.1",
"scripts": {
"start": "node main.js"
},
"dependencies": {
"socket.io": "^1.4.6"
}
}
这是我的 nginx 配置https://gist.github.com/RobinBuschmann/c42a413ecedee463e5bd8e613ddd8d04
files:
"/etc/nginx/conf.d/01_websockets.conf":
mode: "000644"
owner: root
group: root
content: |
upstream nodejs {
ip_hash;
server 127.0.0.1:3000;
keepalive 256;
}
server {
listen 80;
location / {
proxy_pass http://nodejs;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
"/opt/elasticbeanstalk/hooks/appdeploy/enact/41_remove_eb_nginx_confg.sh":
mode: "000755"
owner: root
group: root
content : |
mv /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf.old
【问题讨论】:
标签: node.js amazon-web-services nginx socket.io amazon-elastic-beanstalk