веб-интерфейс 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) никогда не возвращает никаких данных, и веб-сокет в конечном итоге закрывается на стороне клиента, когда рукопожатие не приходит.
Отсюда мой вопрос: что я мог сделать не так?
Включен ли у вас [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 ответов на вопрос
Похожие вопросы
-
4
Требуется хороший бесплатный образ Ubuntu Server VMWare
-
1
Обратный прокси Apache
-
3
Ubuntu Server с рабочим окружением GNOME - настройка разрешений файла конфигурации Apatche
-
-
8
Как я могу дать права на запись в папку всем пользователям Linux?
-
1
Журнал ошибок Apache2
-
2
Mac OS X bash: удалите все apache и PHP вхождения
-
6
Как остановить запуск служб при загрузке в Ubuntu?
-
5
Сопоставьте папку «Сайты» с http: // localhost в OS X
-
2
Существует ли бесплатный анализатор журнала безопасности для apache?
-
6
Установите несколько сред PHP на OS X Snow Leopard