Обсуждение с менеджером обратного прокси

Привет! Пытаюсь настроить Discourse с использованием Reverse Proxy Manager на Nginx на одном сервере. Всё доступно через мой DNS по стандартным портам сервера, но при настройке обратного прокси для маршрутизации трафика через поддомен с принудительным SSL ничего не работает — получаю ошибку 502. У меня запущено несколько контейнеров: Proxy Manager изолирован, а все контейнеры Discourse находятся в другом. Я пересмотрел почти все доступные руководства, но ничего не помогает. Должен же быть способ успешно это сделать в 2025 году! У меня уже работает один сайт через Proxy Manager, и там всё в порядке. Нужно ли мне подключить сеть fpm к контейнерам Discourse, так как это сеть по умолчанию, которую использует Proxy Manager для обеспечения доступности контейнеров Discourse? Если да, то где именно нужно это указать? Я не могу найти никакой информации. Люди говорят, что нужно добавить это в свои настройки, но не объясняют точно, где именно. Я не хочу менять всю свою конфигурацию. Я видел руководства, где советуют не открывать порты и доверить всё Proxy Manager — я это уже пробовал. Также видел советы использовать шаблон web.socketed в директории discourse/templates, но это тоже не сработало. Люди успешно запускают Discourse как с открытыми портами, так и без них. Ничего не выглядит последовательным. Что работает сейчас и что работает надёжно? Помните, что у меня всё работает на одном сервере.

Мой предположение состоит в том, что менеджер прокси работает идеально, а ошибка 502 возникает из-за Discourse, поскольку он настроен неправильно.

Вы закомментировали шаблоны Let’s Encrypt и SSL в своём YAML-файле?

Хорошие новости — пока ничего не выглядит «сломанным». Тот самый 502 почти наверняка был гонкой при первом запуске: Nginx попытался обратиться к /srv/status, прежде чем Unicorn был готов. Если в ваших логах видно:

  • unicorn: run :white_check_mark:
  • Rails запущен :white_check_mark:
  • Ошибка Nginx в HH:MM:SS «connection refused» (вероятно, до завершения запуска Unicorn)

Давайте быстро это исправим.

  1. Попробуйте проверить статус снова (хост → app2)
curl -sSI http://127.0.0.1:8002/srv/status
  1. Если всё ещё показывает 502, просто перезапустите Nginx в app2 и протестируйте из внутри контейнера:
docker exec -it app2 bash -lc 'sv restart nginx && sleep 2 && curl -sSI http://127.0.0.1/srv/status'
curl -sSI http://127.0.0.1:8002/srv/status

Вы должны увидеть HTTP/1.1 200 OK.


У меня получилось. Так как я запускаю в двух контейнерах Docker, мне пришлось разрешить доступ, чтобы они могли видеть друг друга через сеть. Порты не открыты в Discourse, так как он работает на внутренних портах Docker. К тому же это более безопасно.

Джоннибой! Айфоны — это круто!

Вот что тебе сказал какой-то ИИ. Сработало?

Да, всё сработало, и я сообщил о результате в следующей теме: