配置 AWS Elastic Beanstalk Nginx 以使用 socket.io 连接的主要问题

Posted

技术标签:

【中文标题】配置 AWS Elastic Beanstalk Nginx 以使用 socket.io 连接的主要问题【英文标题】:Major issues configuring AWS Elastic Beanstalk Nginx to work with socket.io connections 【发布时间】: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

【问题讨论】:

【参考方案1】:

最终不得不使用 Express.js 使用 express 生成器,然后在这里使用答案502 Bad Gateway Deploying Express Generator Template on Elastic Beanstalk

【讨论】:

以上是关于配置 AWS Elastic Beanstalk Nginx 以使用 socket.io 连接的主要问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Elastic Beanstalk 配置 aws cli 配置文件?

共享 AWS Elastic Beanstalk 配置以将 git 部署到 AWS

如何在 AWS Elastic Beanstalk 上修改 Nginx 配置

高级 AWS Elastic Beanstalk 环境配置

AWS Elastic Beanstalk 中的 HTTPS 配置

如何在 AWS Elastic Beanstalk 中更改数据库配置