Перенаправление в контейнер Discourse с nginx proxy_pass и ссылки из Discourse на сервер хоста

Привет, команда Discourse,

Я запускаю сервер nginx на своей хост-машине и стандартный контейнер Discourse в Docker. По сути, у меня есть небольшое количество конкретных (http) папок, обслуживаемых хост-nginx, а всё остальное перенаправляется в контейнер Discourse через proxy_pass.

Насколько я понимаю проблему, достаточно знать, что в конфигурационном файле хост-nginx определена директива location /xyz, которая обрабатывается хост-nginx, а затем определена директива location /, перенаправляющая запросы в контейнер Discourse.

В моём случае мне нужно публиковать ссылки в сообщениях Discourse, указывающие на my.domaiin.com/xyz/some.html, то есть ссылки внутри Discourse должны вести на страницы, обслуживаемые хост-nginx.

Это работало до последнего обновления Discourse. Теперь при клике на такие ссылки появляется страница Discourse «Не удалось найти…». Однако если скопировать цель ссылки и открыть её в новой вкладке, всё работает как ожидалось.

Я неплохо разбираюсь в низкоуровневых протоколах, но чем выше уровень в стеке протоколов, тем меньше я знаю :wink:

Моя текущая рабочая гипотеза такова: nginx внутри Discourse поддерживает соединение открытым (keepalive?), из-за чего хост-nginx упускает возможность проанализировать новый путь запроса и выбрать правильный сервер. Запросы в рамках соединения передаются в контейнер без изменений, так как соединение остаётся активным. Затем запрос на путь /xyz обрабатывается Discourse, который не знает об этой папке.

Как мне подойти к решению этой проблемы? Если простого решения нет, уже будет полезно получить какие-либо указания, даже хорошее описание с точки зрения грамотного понимания HTTP-протокола.

Спасибо!

Дополнительное примечание: Если это действительно проблема keep-alive, я полностью готов отключить keep-alive и принять некоторые накладные расходы. Эта установка не предназначена для обслуживания огромного числа пользователей.

Подумав об этом, я, вероятно, должен настроить хостовый nginx так, чтобы он также прослушивал именованный канал, подключить этот канал к контейнеру Discourse и добавить мою пользовательскую папку /xyz в конфигурацию nginx внутри Discourse для перенаправления запросов (proxy_pass) обратно через только что созданный канал. (После уточнения деталей, например, хостовый nginx должен запускаться первым, иначе docker-compose не сможет корректно подключить именованный канал)

В любом случае, любая помощь будет очень кстати :wink:

Это связано с тем, что маршрутизатор Ember.JS знает полный список путей, поддерживаемых приложением Discourse, и страница 404 отображается на стороне клиента, так как он знает, что на сервере нет контента по этому пути.

Разместите ваши файлы на другом поддомене.