HintergrundWebsocket arbeitet auf url EC2, aber nicht auf ElasticBeanstalk URL
Ich habe Reverse-Proxy (nginx), der auf ElasticBeanstalk (ELB), die ein SingleInstance Umgebungstyp ist und schafft eine EC2-Instanz (EC2). Ich verwende eine dockerisierte Nodejs-App. nginx ist der Einstiegspunkt für unsere Infrastruktur.
Desciption
Von Browser, kann ich direkt anrufen Websocket URLs eines EC2 und von ELB mit dem gleichen Ergebnis:
Willkommen bei SockJS!
Für nginx ich die folgende Konfiguration verwenden (nginx conf.d/my.conf), wo ich nur URLs von EC2 ändern oder ELB auf der Linie mit proxy_pass
beginnen:
location /stomp {
proxy_pass <{EC2_URL}/stomp OR {ELB_URL}/stomp>;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
WebSockets auf der EC2 URL funktionieren nur gut.
Websockets auf der ELB URL zurückgeben einen Fehlerstatus zurück zu meinem Klienten:
Code: 1002 Grund: "Kann keine Verbindung zum Server"
Das Merkwürdigste ist, dass mein nginx Server protokolliert nicht einmal die Anforderungen im Fall von ELB.
Frage
Warum ist die ELB nicht nginx Konfiguration in der Arbeit? Wie man es korrigiert?
Was habe ich ausprobiert?
Ich habe eine question und ein blog geprüft, wo sie Beratung in located in /tmp/deployment/config/etc#nginx#nginx.conf
nginx Konfigurationsdateien wie 00_elastic_beanstalk_proxy.conf
befindet sich außer Kraft zu setzen. Aber mein Server hat keine Nginx-Konfigurationsdateien auf dem Dateisystem ...
Also wo läuft Nginx in Ihrem Fall? –
Welchen Port verbinden Sie? Die standardmäßige Konfiguration von Load Balancer darf nur Daten von Port 80 oder Port 443 verarbeiten. Wenn Sie SSL verwenden, verfügen Sie über ein mit ElasticBeanstalk konfiguriertes Zertifikat? Wenn Sie die Anfrage nie auf der Nginx-Seite erhalten, werden Sie möglicherweise nie von Ihrem Load Balancer weitergeleitet. Um Ihren Load Balancer zu sehen, gehen Sie zu EC2 -> Load Balancer im AWS-Panel. – jonzlin95
@ jonzlin95 Wir verbinden über Port 80. Es gibt keine Load Balancer in "EC2 → Load Balancer", aber das ist keine Überraschung. Weil wir nur den ELB mit dem SingleInstance-Umgebungstyp verwenden. – zatziky