Сервер 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. )

Любая помощь в отладке рекомендаций будет принята с благодарностью. Или идеи для различных подходов. Также скажите мне, должен ли я предоставить дополнительную информацию или поделиться конкретными конфигурационными файлами. Заранее спасибо!

Вернуться на верх