对没有文件扩展名的组合 JS 或 CSS 文件启用 Gzip

对没有文件扩展名的组合 JS 或 CSS 文件启用 Gzip

我正在尝试在 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。

无论如何,更多信息可能会有帮助。

相关内容