В логах часто появляются предупреждения об ошибках DistributedMutex

Скорее всего, это не вызвано напрямую обратным прокси-сервером.

Для постов, созданных через API, Discourse использует DistributedMemoizer вокруг PostsController#create, чтобы избежать дублирования создания постов. Этот мемоизатор использует DistributedMutex с поддержкой Redis, имеющий очень короткое время действия — 1 секунду. Предупреждение означает, что работа по созданию/сериализации поста внутри этой блокировки заняла больше времени, чем ожидалось.

Таким образом:

  • если пост через API всё же создан успешно, это предупреждение, а не корневая причина сбоя;
  • сообщение expected max: 1 secs, took an extra 1 secs означает, что блокировка удерживалась примерно 2 секунды;
  • проблема скорее связана с производительностью сервера, задержками Redis/Postgres, дисковым вводом-выводом, нагрузкой на ЦП/ОЗУ, плагинами или медленной постобработкой, чем с самим обратным прокси-сервером nginx/1Panel;
  • причина, по которой это возникает только при публикации через API, в том, что данный путь мемоизации используется именно для API-запросов.

Стоит проверить следующее:

  1. Успешен ли API-запрос и создаётся ли только один пост?
  2. Сколько времени занимает API-запрос со стороны клиента?
  3. Не исчерпаны ли ресурсы ЦП, памяти, swap или дисковый ввод-вывод во время публикации через API?
  4. Находятся ли Redis и Postgres в одном контейнере/на одном хосте, и работают ли они корректно?
  5. Повторяется ли предупреждение при создании очень небольшого поста с простым текстом без изображений/загрузок?
  6. Установлены ли нестандартные плагины?

Поскольку речь идёт о развёртывании через 1Panel/контейнеры, а не о стандартной установке Discourse в Docker, может быть полезно воспроизвести проблему на официально поддерживаемой установке, если это возможно, прежде чем считать это ошибкой ядра Discourse.