Nginx 无法正确处理 .br (Brotli) 和 .gz (GZip) 文件请求

Nginx 无法正确处理 .br (Brotli) 和 .gz (GZip) 文件请求

我无法设置 nginx 1.18(Ubuntu 22.04 作为服务器环境,Chrome 104 作为客户端)来处理.br.gz文件。

我的前端代码捆绑器(Parcel 2)已生成.brindex.html.gz文件,但是当我尝试访问 https://mysite/index.html 时,它会抛出404 Not found,而使用 https://mysite/index.html.br 它只是尝试下载Brotli文件。

我的假设是 Nginx 应该将文件发送.br.gzChrome,然后 Chrome应该自动提取它转换为常规 html 文件并显示网页。这样做对吗?

这是我的摘录nginx.conf

load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;
...
...
...
       ##
        # Gzip Settings
        ##

        gzip on;

        # gzip_vary on;
        # gzip_proxied any;
        # gzip_comp_level 6;
        # gzip_buffers 16 8k;
        # gzip_http_version 1.1;
        # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

        brotli on;
        brotli_static on;
        brotli_types
        text/plain
        text/css
        text/xml
        text/javascript
        text/x-component
        application/xml
        application/xml+rss
        application/javascript
        application/json
        application/atom+xml
        application/vnd.ms-fontobject
        application/x-font-ttf
        application/x-font-opentype
        application/x-font-truetype
        application/x-web-app-manifest+json
        application/xhtml+xml
        application/octet-stream
        font/opentype
        font/truetype
        font/eot
        font/otf
        image/svg+xml
        image/x-icon
        image/vnd.microsoft.icon
        image/bmp;

这是服务器配置:

...
    location ~* \.(js|jpg|png|jpg|jpeg|git|ico|css|eot|woff|woff2|svg|webmanifest)$ {
      root /var/www/main;
      try_files $uri $uri/ /webgl$uri =404;
    }

    location / {
      root /var/www/main/webgl;
      try_files $uri $uri/ =404;
    }
...

我该怎么办?谢谢!

答案1

如果你的服务器上没有未压缩的版本,你需要使用nginx gunzip 模块当客户端请求文件的未压缩版本时,让 nginx 解压缩该文件。

gzip_static仅告诉 nginx 将版本发送.gz给接受 gzip 编码响应的客户端。

答案2

看起来 Nginx 无法处理index.html.br,并且文件夹中index.html.gz没有版本。index.html

解决方案:只需将未压缩的文件添加到您的文件夹,Nginx 就会发送压缩文件(当然,如果浏览器accept-encoding在请求中发送适当的属性(例如accept-encoding: gzip, deflate, br)。

参考https://trac.nginx.org/nginx/ticket/1367

相关内容