веб-интерфейс apache для приложения uwsgi websocket

413
mathieu

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

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

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

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

(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:$;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 

Наконец, (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
Включен ли у вас [mod_proxy_wstunnel] (https://httpd.apache.org/docs/2.4/mod/mod_proxy_wstunnel.html)? user2313067 8 лет назад 0
Нет, но это не нужно, так как именно мое веб-сокет-приложение генерирует рукопожатие. Я не хочу, чтобы apache сделал это для меня. Я просто хочу, чтобы apache ушел с дороги. mathieu 8 лет назад 0
Из того, что я могу сказать, [mod_proxy_uwsgi] (https://github.com/unbit/uwsgi/blob/master/apache2/mod_proxy_uwsgi.c) анализирует заголовки и тело перед генерацией ответа. Кажется, он не способен прокси веб-сокетов. Он также не указан на [странице поддержки websocket] (https://uwsgi-docs.readthedocs.org/en/latest/WebSockets.html) uwsgi. user2313067 8 лет назад 1
Я думаю, ты прибил это. mathieu 8 лет назад 0
Просто чтобы подтвердить это: я в конечном итоге построил рабочую конфигурацию, основанную на использовании ProxyPass ws: // для подмножества моих URL, чтобы убедиться, что apache правильно перенаправляет рукопожатие websocket. (читатели, остерегайтесь порядка заявлений ProxyPass!) mathieu 8 лет назад 0

0 ответов на вопрос