我无法设置 nginx 1.18(Ubuntu 22.04 作为服务器环境,Chrome 104 作为客户端)来处理.br
或.gz
文件。
我的前端代码捆绑器(Parcel 2)已生成.br
index.html.gz
文件,但是当我尝试访问 https://mysite/index.html 时,它会抛出404 Not found
,而使用 https://mysite/index.html.br 它只是尝试下载Brotli
文件。
我的假设是 Nginx 应该将文件发送.br
到.gz
Chrome,然后 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
)。