Вот моя конфигурация:

Apache (1) -> обычное приложение uwsgi (2) -> приложение websocket uwsgi (3)

(1) настроен следующим образом:

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

(2) настроен следующим образом, чтобы разгрузить обработку веб-сокета в (3) после авторизации:

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:${CONTENT_TYPE};text/event-stream addvar:SUBSCRIPTION=${SUBSCRIPTION} 
response-route-if=equal:${CONTENT_TYPE};text/event-stream disableheaders: response-route-if=equal:${CONTENT_TYPE};text/event-stream uwsgi:/run/websockets-staging/socket,0,0

Наконец, (3) довольно просто:

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

Благодаря strace я вижу, что входящий запрос websocket корректно выгружается в (3), (3) отправляет обратно рукопожатие websocket, которое пересылается в (2), которое пересылает его в (1).

Тем не менее, рукопожатие websocket, кажется, теряется на пути к клиентской стороне. то есть, (1) никогда не возвращает никаких данных, и веб-сокет в конечном счете закрывается на стороне клиента, когда рукопожатие не приходит.

Отсюда мой вопрос: что я мог сделать не так?

0