Apache-Frontend für die Uwsgi-Websocket-Anwendung

529
mathieu

Hier ist meine Konfiguration:

Apache (1) -> normale Uwsgi-App (2) -> Websocket-Uwsgi-App (3)

(1) ist wie folgt konfiguriert:

ProxyPass /{}/static/ ! ProxyPass /{}/v3/build/ ! ProxyPass /{}/ uwsgi://127.0.0.1:{}/{}/ 

(2) ist wie folgt konfiguriert, um die Websocket-Verarbeitung nach der Autorisierung auf (3) zu verschieben:

socket=127.0.0.1:9097 master=true  workers=1  offload-threads=2  collect-header=Content-Type CONTENT_TYPE  collect-header=Subscription SUBSCRIPTION  response-route-if=equal:$;text/event-stream addvar:SUBSCRIPTION=$  response-route-if=equal:$;text/event-stream disableheaders: response-route-if=equal:$;text/event-stream uwsgi:/run/websockets-staging/socket,0,0 

Schließlich ist (3) ziemlich einfach:

socket=/run/websockets-staging/socket  plugins=python,http,gevent  http-websockets=true gevent=1000 

Dank strace sehe ich, dass die eingehende Websocket-Anforderung korrekt nach (3) verschoben wird, (3) den Websocket-Handshake zurückschickt, der an (2) weitergeleitet wird, wodurch er an (1) weitergeleitet wird.

Der Websocket-Handshake scheint jedoch auf dem Weg zurück zur Client-Seite verloren zu sein. Das heißt, (1) gibt niemals Daten zurück und der Websocket wird schließlich clientseitig geschlossen, wenn der Handshake nicht ankommt.

Daher meine Frage: Was hätte ich falsch machen können?

0
Haben Sie [mod_proxy_wstunnel] (https://httpd.apache.org/docs/2.4/mod/mod_proxy_wstunnel.html) aktiviert? user2313067 vor 8 Jahren 0
Nein, aber es ist nicht erforderlich, da meine Websocket-Anwendung den Websocket-Handshake generiert. Ich möchte nicht, dass Apache das für mich tut. Ich möchte nur, dass Apache aus dem Weg geht. mathieu vor 8 Jahren 0
Soweit ich das beurteilen kann, parst [mod_proxy_uwsgi] (https://github.com/unbit/uwsgi/blob/master/apache2/mod_proxy_uwsgi.c) die Header und den Body, bevor die Antwort generiert wird. Es scheint nicht in der Lage zu sein, Websockets zu proxy. Es ist auch nicht auf der [websocket-Support-Seite] (https://uwsgi-docs.readthedocs.org/de/latest/WebSockets.html) von uwsgi aufgeführt. user2313067 vor 8 Jahren 1
Ich nehme an, Sie haben es festgenagelt. mathieu vor 8 Jahren 0
Um dies zu bestätigen, habe ich schließlich eine funktionierende Konfiguration erstellt, die auf der Verwendung von ProxyPass ws: // für eine Teilmenge meiner URLs basiert, um sicherzustellen, dass Apache den Websocket-Handshake richtig weiterleitet. (Leser, passen Sie auf die Reihenfolge der ProxyPass-Anweisungen auf!) mathieu vor 8 Jahren 0

0 Antworten auf die Frage