La soluzione è quella di configurare il Loadbalacer per collegare direttamente al 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"
- Creare una cartella denominata .ebextensions nella cartella WEB-INF Forse in versione più recente delle .ebextensions deve essere nella cartella principale, qualcuno può confermarlo?
- Creare un file chiamato websocket.config in questa cartella con i contenuti dall'alto
- distribuire l'applicazione
- Ricostruire l'ambiente
Per una configurazione senza SSL rimuovere questo:
- {LoadBalancerPort: 443, InstanceProtocol: "TCP", InstancePort: 8080, Protocol: "SSL", SSLCertificateId: "arn:aws:iam::9999999999999:server-certificate/sslcert"}
Oppure sostituire Apache con Nginx e configurare Niginx per supportare WebSocket
sei EC2 securityGroup che consente la porta 80? –
sì, posso accedere ad ogni servlet tramite la porta 80. Solo l'aggiornamento del protocollo non funziona. – patrick
è il proxy Apache nell'istanza EC2 davanti al proxy Apache Tomcat – patrick