从子文件夹(路径前缀)而非子域名提供 Discourse 服务

有一段时间了,我们频繁看到容器输出 X-Accel-Mapping header missing 消息,但并非每次访问或每次导航步骤都会触发。我注意到该头在 Nginx 配置中已显式定义,但并非针对所有请求:discourse/config/nginx.sample.conf at main · discourse/discourse · GitHub

由于我在论坛其他地方没看到有人报告此问题,我怀疑这是否与我们使用的子目录(subdir)设置有关,尽管我目前看不出具体关联。

我不确定究竟是什么在发出该消息,但我推测只有当 X-Sendfile-Type 设置为 X-Accel-RedirectX-Accel-Mapping 未设置时才会发生。而当前配置要么同时定义两者,要么将两者都设为空 :thinking:

实际上,该消息仅在访问备份时出现,更关键的是,在访问上传内容时出现。我刚刚测试并确认,只要查看包含上传图片或类似内容的帖子,就会触发该消息。查看配置后,按理说不可能出现 X-Accel-Redirect 已设置而 X-Accel-Mapping 未设置的情况。此外,这是由容器内的 Nginx 设置的请求头,仅被 Discourse/unicorn/pitchfork/backend 消费,也就是说它根本不会进入或离开容器。

啊,我们配置 Nginx 将日志输出到 STDERR,而我在 Discourse 日志中没看到这些信息,因此可以确定是 Nginx 本身发出的。这很可能也是其他人尚未注意到该问题的原因,因为它出现在 Nginx 日志文件中。是否有人有空检查一下他们的 shared/*/log/var-log/nginx/error.log 是否也包含这些日志?如果是的话,我会再联系那些未使用子目录设置的用户,以便进一步缩小问题范围。