Фиксация версии Nginx

Не совсем подходит под категорию Contribute > Bug, но и неясно, в какую другую категорию его стоит отнести. Это проблемный вопрос, и он не относится к Contribute > Feature. Возможно, к Support, но я довольно уверен, что понимаю, что делаю.

См. также: аналогичная тема 3-летней давности Dockerfile in official install instructions uses unsupported version of Nginx

В ходе плановой пентеста на этой неделе выяснилось, что используемая версия NGINX достигла конца жизненного цикла (EOL). Эксплуатировать эту уязвимость не удалось, но проблема была помечена как требующая срочного исправления.

Попытка обновить Discourse через git pull всё ещё не решила проблему, потому что хотя репозиторий Discourse Docker обновлён, шаблоны фиксируют базовый образ предыдущей версии (discourse/base:2.0.20260109-0020).

Несколько вопросов:

  • Почему зафиксированная версия NGINX была настолько старой, что уже достигла EOL? Есть ли какие-то причины, о которых я не знаю?

  • Почему новая версия была выбрана как 1.28.1, а не 1.29.4 (самая актуальная на 27.01.2026) — снова же, есть ли для этого обоснование?

В целом, Discourse, кажется, очень стремится держать всех пользователей на недавних версиях (что кажется разумным), например, то, что раньше называлось tests-passed.

Как мне обновить NGINX (желательно без локальных хаков)?

1 лайк

Специфической причины нет, просто мы давно не проходили процесс обновления. Вы правы: в идеале мы должны были заметить это до того, как версия перешла в статус EOL.

1.28.1 — это последняя «стабильная» версия, поэтому мы остановились на ней. Версии 1.29.x относятся к «основной» ветке с более частыми изменениями, и нам в данный момент не нужны новые функции из неё.

Спасибо, что обратили на это внимание. Мы теперь обновили тег в шаблонах, поэтому повторный запуск ./launcher rebuild app должен предоставить вам новую версию nginx.

6 лайков

Без проблем, и спасибо за быстрый ответ, @david!

К сожалению, это всё ещё, похоже, не работает. Выполнение git pull, а затем ./launcher rebuild app действительно загрузило новый образ (discourse/base:2.0.20260116-2039), но, похоже, в образе всё ещё остаётся nginx 1.26.3:

root@server:/var/discourse# docker exec -it app nginx -v
nginx version: nginx/1.26.3

Я проверяю свою сторону на случай, если это какая-то странная проблема с кэшированием контейнеров, но, насколько я могу судить, дело просто в том, что базовый образ 20260116-2039 всё ещё содержит NGINX 1.26.3.

1 лайк

Интересно, я вижу то же самое. Хотя мы обновили NGINX в конфигурации, похоже, что обновление образа могло быть направлено конкретно на Redis, а не на NGINX.

Я свяжусь с командой и посмотрим, как зафиксировать ещё более новую версию образа.

4 лайка

Есть ли какие-либо новости по проблеме фиксации версии NGINX? Я видел выпуск 2026.1.0-latest, но, насколько я могу судить, он не обновляет базовый образ.

Мы только что обновили образ: Bump base image to `20260129-0023` (#1035) · discourse/discourse_docker@068819b · GitHub

Так что следующая пересборка должна предоставить вам NGINX 1.28.1

3 лайка

Спасибо @david, теперь всё работает.

1 лайк