我正在尝试在 Elastic Beanstalk 上运行一个简单的 websocket echo 应用程序.但是,如果我运行它,我会在 Tomcat 的套接字升级上收到错误 400,但是如果我通过端口 8080,这只会发生在端口 80 上,认为负载均衡器我可以访问 websocket,而不会在套接字升级时出现错误 400(在端口 8080 上)).端口 8080 和端口 80 都在 TCP 而非 HTTP 上.
I'm trying to run a simple websocket echo application on Elastic Beanstalk. But if I run it I'm getting an error 400 on the Socket Upgrade from Tomcat, but this just happens on port 80 if I pass port 8080 thought the loadbalancer I can access the websocket without the error 400 on socket upgrade (on port 8080). Port 8080 and Port 80 are both on TCP not HTTP.
我的问题是谁在做从 80 到 8080 的转换,因为负载均衡器上的默认配置只是将流量从 80 传递到 80.转换必须在 EC2 实例上进行.IP表?在这个翻译中出了点问题.
My question is who is doing the translation from 80 to 8080 as the default configuration on the loadbalancer just pass traffic from 80 to 80. The translation has to be on the EC2 instance. IPTables? In this translation something goes wrong.
如果能从亚马逊获得一些有关此流量如何路由的信息会很好.
It would be nice to get some inforamtion from amazon on how this traffic is routet.
推荐答案解决方案是配置Loadbalacer直接连接Tomcat:
The solution is to configure the Loadbalacer to connect directly to the 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"对于没有 SSL 的设置,请删除此:
- {LoadBalancerPort: 443, InstanceProtocol: "TCP", InstancePort: 8080, Protocol: "SSL", SSLCertificateId: "arn:aws:iam::9999999999999:server-certificate/sslcert"}或者用 Nginx 并配置 Niginx 以支持 WebSocket
Or replace Apache by Nginx and configure Niginx to support WebSocket
更多推荐
AWS Elastic Beanstalk 上带有 Tomcat 7 的 Websocket
发布评论