Сервер Redis внутри контейнера Docker с nginx + redis_pass
Я разрабатываю простое приложение чата (основанное на django-private-chat2) с django & django-channels. Я хочу, чтобы приложение было полностью контейнерным и использовало nginx для маршрутизации внутри контейнера.
Итак, я пытаюсь подключиться через веб-сокет к redis-серверу, работающему внутри контейнера docker. Я перепробовал много вещей (см. ниже), но все еще не могу заставить его работать. Не исключено, что мой общий подход неверен.
Вот что у меня есть на данный момент.
- Redis-сервер и websocket-соединение работает вне контейнера Docker.
- Внутри контейнера docker я компилирую и запускаю nginx с 'HTTP Redis' здесь .
- этот модуль загружается через 'load_module *.so' внутри nginx.conf, я проверил, что модуль загружен.
- Я настроил redis-сервер внутри Docker-контейнера на использование 'bind 0.0.0.0 и protected-mode no' .
- Внутри nginx я направляю весь трафик '/' на приложение django, работающее на порту 8000.
- Я направляю весь трафик 'chat_ws/' (из веб-сокета) на 127.0.0.1:6379 redis-сервер (с помощью nginx reverse_proxy). .
- Я проверил, что маршрутизация работает правильно (возврат 404 с nginx на chat_ws адреса работает).
- Я могу подключиться к redis-серверу через redis-cli на моей машине, когда я использую 'redis-cli -h DOCKER_CONTAINER_IP', так что redis_pass также, кажется, работает.
- В настройках django я указал CHANNEL_LAYERS и установил хост бэкенда redis на 127.0.0.1:6379 (что опять же работает совершенно нормально вне контейнера Docker) .
- Но если я открываю веб-страницу (через контейнер Docker) в браузере, все работает за исключением соединения websocket с redis-сервером
Меня особенно смущает, что подключение redis-cli к контейнеру работает нормально, но не работает websocket, который работает локально (вне контейнера).
( О чем я думал:
)- может быть, соединение web-socket с redis_pass через nginx вообще проблематично?
- Возможно, версия 'HTTP Redis' слишком старая, но как это отладить, поскольку я не вижу никакого лог-вывода модуля в stdout nginx. )
Любая помощь в отладке рекомендаций будет принята с благодарностью. Или идеи для различных подходов. Также скажите мне, должен ли я предоставить дополнительную информацию или поделиться конкретными конфигурационными файлами. Заранее спасибо!