2013-08-27 81 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