Nginx 版本锁定

严格来说不算 Contribute > Bug,但也不清楚它应该归入哪个其他类别。这个问题确实存在,而且它也不是 #contribute:feature。可能是 Support,但我相当确定自己在这里的操作是正确的。

参见:3 年前的一篇类似帖子 Dockerfile in official install instructions uses unsupported version of Nginx

本周的一次常规渗透测试发现,当前使用的 NGINX 版本已停止维护(EOL)。虽然无法利用该漏洞,但系统已标记需要尽快修复。

尝试通过 git pull 更新 Discourse 仍未解决该问题,因为尽管 Discourse Docker 仓库已更新,但模板仍将基础镜像锁定为上一个版本(discourse/base:2.0.20260109-0020)。

有几个问题:

  • 为什么锁定的 NGINX 版本如此陈旧,以至于已经停止维护?是否有我不知道的原因?

  • 为什么新版本选择的是 1.28.1,而不是 1.29.4(截至 2026.01.27 的最新版本)——同样,是否有相关原因?

通常,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 个赞