Discourse 未使用 brotli 或 gzip 压缩?

您好。我在 CentOS 服务器上安装了 Discourse,同时也使用了 CentOS 网页面板。

看起来 Discourse 中的文件并未被压缩,尽管它默认应使用 Brotli 并在必要时回退到 Gzip。

例如,这个大小为 2.2 MB 的文件:
https://forum.canapin.win/assets/application-301651b1c7400a000974a9cecafd44ad3304cf647cf17bcfa7af68e9ed1ac4b7.js

响应头:
    accept-ranges: bytes
    cache-control: max-age=31536000
    cache-control: public,immutable
    content-length: 2334732
    content-type: application/javascript
    date: Sat, 12 Oct 2019 23:36:50 GMT
    expires: Sun, 11 Oct 2020 23:36:50 GMT
    last-modified: Sat, 12 Oct 2019 23:33:24 GMT
    server: nginx/1.16.1
    status: 200
请求头:
    :authority: forum.canapin.win
    :method: GET
    :path: /assets/application-301651b1c7400a000974a9cecafd44ad3304cf647cf17bcfa7af68e9ed1ac4b7.js
    :scheme: https
    accept: */*
    accept-encoding: gzip, deflate, br
    accept-language: en-US,en;q=0.9
    cache-control: no-cache
    cookie: _t=89fc0a58f2a08712f3156f2687553cf8; __profilin=p%3Dt%2Ca%3Da546654bdc3538a213cd6c6fcc4c2a92; _forum_session=YnhETkNaTjF1YTEzVXUvZW1pS1NuTVVzdm1WWndlRktMdmNlU3hBalR3dUYwRGVUTzhBSlM5WkNiS0hDdVQvRmtGeGtLOTRRNndRWk9YUFczbTJHdjMyajlNNkpXZ2xzeEZwMkVmd2grcHlILzJVVmZWeFVVNlBERVF4S3VDMkJ0N2pUWktJWitmbXc2MDFFV1VEcG56M09jalRjMEJOb2t6M1NSbjJQUit1eDFRZkdCMGplVjhLK1JUNFVNdnRmVmZuK1B1NVdwK0N5Q1VrNTdDa01tdXh1T3h2aDY4OGx0SDMzRC9Ma0YzdElFS0p6b0x3algvVnRhVlljVDQyOS0tYnpSeFl5MjNoMVFVMm42UE0ybFJ6Zz09--b49c4c072e917618f874818e246298bce81235e5
    dnt: 1
    pragma: no-cache
    referer: https://forum.canapin.win/
    sec-fetch-mode: no-cors
    sec-fetch-site: same-origin
    user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36

有什么原因吗?

您的安装是否遵循我们官方 Docker 安装指南的标准流程?

我参考了以下内容:

在启动应用之前,我修改了 app.yml 中的端口,因为 80 端口已被占用。

我没有使用 discourse setup,因为我已经安装了 Docker。

为了非常精确地说明我如何安装 Discourse,以下是我遵循的步骤:

git clone https://github.com/discourse/discourse_docker.git /var/discourse
cd /var/discourse
cp samples/standalone.yml containers/app.yml

在此处更改了我的端口:

## 此容器应暴露哪些 TCP/IP 端口?
## 如果您希望 Discourse 与另一个 Web 服务器(如 Apache 或 nginx)共享端口,
## 请参阅 https://meta.discourse.org/t/17247 了解详情
expose:
  - "8080:80" # 将主机端口 80 转发到容器端口 8080(http)
  - "4443:443" # 将主机端口 443 转发到容器端口 4443(https)
./launcher bootstrap app
./launcher start app

并在 CentOS Web 面板的 nginx 配置中重定向了我的端口:

就是这样。

问题就在这里,它在代理数据,但没有正确地将数据透传过去。

我建议直接使用我们的标准安装方案,它会将互联网直接连接到我们的容器,并为您自动处理所有相关事宜。

谢谢。我对服务器之类的东西不太了解,也不知道如何实现这一点。我之前使用 Plesk 并采用其默认设置,即使配合 nginx 代理也能完美运行。

不过,我会尽力弄清楚这个问题。

感谢 @Arkshine,我的问题已解决。

我需要在 /etc/nginx/proxy.inc 中注释掉以下行:

proxy_hide_header Vary;
proxy_set_header Accept-Encoding '';

现在服务器能正确发送由 Discourse 压缩的文件: