2015-06-06 47 views
2

我們有彈性beanstalk實例,我們也有一些其他的服務和socket.io。 Express正在啓動廣告端口80.我在3001上啓動了socket.io,但無法連接此套接字。我也關閉了代理,從nginx關閉。對於插座 代碼如下如何運行socket.io並在相同的彈性beanstalk實例上表示?

var express   = require('express'), 
    app    = express(), 
    server   = require('http').createServer(app), 
    io    = require('socket.io')(server), //make sockets 
    port   = 3001;//port for socket 

//initiate server 
server.listen(port, function() { 
    console.log('Socket.io listening at port %d', port); 
}); 

回答

-3

這是問題與安全限制。否則代碼工作正常。感謝幫助傢伙。

+6

你能否提供更多關於錯在哪裏以及如何解決它的信息? –

0

我不能肯定地說,但我覺得你沒有端口3001上的安全組開放。您必須允許端口3001上的流量用於您的eb應用的ec2 sg,以便您的elb應用的ELB可以訪問。另外,請確保您配置ELB的SG,以便任何來自互聯網的人都可以通過ELB訪問EC2實例上的socket.io端口。但是,您需要使用基於TCP的偵聽器,並且啓用代理協議才能使socket.io正常工作。我沒有檢查過,但我不認爲你可以在偵聽器部分配置端口3001。在這種情況下,您可以使用nginx並配置上游和位置塊,以便發送請求以糾正上游。您可以查看基於.ebextensions的配置,以便在部署過程中適當地替換nginx配置。這樣做的缺點是您的腳本可能需要隨着彈性beanstalk解決方案堆棧的升級而改變。

7

默認情況下,彈性beanstalk實例的前面有一個未配置爲允許webSocket的nginx代理。您可以關閉代理,也可以將nginx實例配置爲支持webSockets。

這裏的an article描述如何在代理中啓用對webSockets的支持。

而且,這裏有兩篇文章描述完全禁用代理herehere

而且,即使是StackOverflow的問題/關於同一主題的答案:

Websockets with socket.io on AWS Elastic Beanstalk

+0

但我的nginx代理關閉。 –

+0

你如何關閉nginx? –

+0

@DanielvanFlymen - 在這裏描述:http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_nodejs.container.html – jfriend00

0

在.ebextensions中創建一個新的配置文件。

補充一點:

container_commands: 
enable_websockets: 
    command: | 
    sed -i '/\s*proxy_set_header\s*Connection/c \ 
      proxy_set_header Upgrade $http_upgrade;\ 
      proxy_set_header Connection "upgrade";\ 
    ' /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf 
相關問題