我正在尝试在 nginx 服务器上配置 GZip。它适用于具有文件扩展名的文件。
为了决定通过网络提供哪种类型的文件,Nginx 不会分析文件内容……相反,它只是查找文件扩展名确定其 MIME 类型
因此,当我有一个没有文件扩展名的合并 css 文件时,它不知道需要进行 gzip 压缩,而是以普通形式提供。
有没有办法让 nginx 知道从指定位置提供的所有内容始终需要进行 gzip 压缩。带或不带文件扩展名?
答案1
我已经让它工作了:
location /files {
types { }
default_type text/css;
gzip on;
gzip_min_length 1;
gzip_proxied any;
gzip_types text/css;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
gzip_comp_level 6;
}
并测试:
curl -v localhost/files/test1
* About to connect() to localhost port 80 (#0)
* Trying ::1...
* Connected to localhost (::1) port 80 (#0)
> GET /files/test1 HTTP/1.1
> User-Agent: curl/7.29.0
> Host: localhost
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: nginx/1.6.3
< Date: Tue, 21 Jun 2016 07:23:17 GMT
< Content-Type: text/css
< Content-Length: 13
< Last-Modified: Tue, 21 Jun 2016 07:23:08 GMT
< Connection: keep-alive
< ETag: "5768eb5c-d"
< Accept-Ranges: bytes
<
MY DATA HERE
* Connection #0 to host localhost left intact
没有扩展名的文件以 text/css mime 形式发送。或者您需要什么?text/html?
现在测试 gzip:
curl -H "Accept-Encoding: gzip" localhost/files/test1 | gunzip
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 33 0 33 0 0 217 0 --:--:-- --:--:-- --:--:-- 218
MY DATA HERE
答案2
您可以为这些文件创建一个位置并为它们设置 default_type...但是为什么要做这样一件奇怪的事情?
可能是这样的:
server {
server_name my_server.com;
listen 80;
location /my_files {
types { }
default_type text/css;
}
}
理论上,它应该将此位置下的所有文件作为“text/css”mime 类型发送。但我从未这样做过,也不知道它是否可行。也可以在该位置启用 Gzip。
无论如何,更多信息可能会有帮助。