2013-08-27 120 views
13

我想在Elastic Beanstalk上運行一個簡單的websocket回聲應用程序。但是,如果我運行它,我從Tomcat的套接字升級得到一個錯誤400,但是這隻發生在端口80,如果我通過端口8080認爲loadbalancer我可以訪問websocket沒有錯誤400套接字升級(在端口8080 )。端口8080和端口80都在TCP上而不是HTTP。Websocket與AWS上的Tomcat 7 Elastic Beanstalk

我的問題是誰在做從80到8080的翻譯,因爲loadbalancer上的默認配置只是將流量從80傳遞到80.翻譯必須位於EC2實例上。 iptables的?在這個翻譯中出了點問題。

從亞馬遜那裏得到關於這個流量路由的一些信息是很好的。

+0

是你EC2安全組允許端口80? –

+0

是的,我可以通過端口80訪問每個servlet。只是協議升級不起作用。 – patrick

+0

它接縫爲Tomcat前EC2實例上的Apache Proxy – patrick

回答

16

解決的辦法是配置Loadbalacer直接連接到Tomcat:

Resources: 
    AWSEBSecurityGroup: 
    Type: "AWS::EC2::SecurityGroup" 
    Properties: 
     GroupDescription: "Security group to allow HTTP, SSH and 8080 for all" 
     SecurityGroupIngress: 
     - {CidrIp: "0.0.0.0/0", IpProtocol: "tcp", FromPort: "80", ToPort: "80"} 
     - {CidrIp: "0.0.0.0/0", IpProtocol: "tcp", FromPort: "8080", ToPort: "8080"} 
     - {CidrIp: "0.0.0.0/0", IpProtocol: "tcp", FromPort: "22", ToPort: "22"} 
    AWSEBLoadBalancer: 
    Type: "AWS::ElasticLoadBalancing::LoadBalancer" 
    Properties: 
     Listeners: 
     - {LoadBalancerPort: 443, InstanceProtocol: "TCP", InstancePort: 8080, Protocol: "SSL", SSLCertificateId: "arn:aws:iam::9999999999999:server-certificate/sslcert"} 
     - {LoadBalancerPort: 80, InstanceProtocol: "TCP", InstancePort: 8080, Protocol: "TCP"} 
     AppCookieStickinessPolicy: 
     - {PolicyName: "lb-session", CookieName: "lb-session"} 
     HealthCheck: 
     HealthyThreshold: "3" 
     Interval: "30" 
     Target: "HTTP:8080/ping.html" 
     Timeout: "5" 
     UnhealthyThreshold: "5" 
  1. 創建一個名爲.ebextensions在WEB-INF文件夾 也許在新的版本中.ebextensions文件夾有在根文件夾中,有人可以證實這一點嗎?
  2. 此文件夾中與上述
  3. 將應用程序部署
  4. 內容創建一個名爲websocket.config文件重建環境

對於沒有設置SSL刪除此

- {LoadBalancerPort: 443, InstanceProtocol: "TCP", InstancePort: 8080, Protocol: "SSL", SSLCertificateId: "arn:aws:iam::9999999999999:server-certificate/sslcert"} 

或將Apache替換爲Nginx並將Niginx配置爲支持WebSocket

+0

這個配置在哪裏完成?在ebextensions或tomcat配置中的某處? – Kevin

+1

好的 - 算出來了,它是一個ebextensions配置文件。 – Kevin

+0

@Kevin - 你可以發表一個適合你的例子.ebextension嗎? – Jason