Привет, команда 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 «Не удалось найти…». Однако если скопировать цель ссылки и открыть её в новой вкладке, всё работает как ожидалось.
Я неплохо разбираюсь в низкоуровневых протоколах, но чем выше уровень в стеке протоколов, тем меньше я знаю ![]()
Моя текущая рабочая гипотеза такова: nginx внутри Discourse поддерживает соединение открытым (keepalive?), из-за чего хост-nginx упускает возможность проанализировать новый путь запроса и выбрать правильный сервер. Запросы в рамках соединения передаются в контейнер без изменений, так как соединение остаётся активным. Затем запрос на путь /xyz обрабатывается Discourse, который не знает об этой папке.
Как мне подойти к решению этой проблемы? Если простого решения нет, уже будет полезно получить какие-либо указания, даже хорошее описание с точки зрения грамотного понимания HTTP-протокола.
Спасибо!