Apache 2.4.37 mod_deflate 不起作用

Apache 2.4.37 mod_deflate 不起作用

我已经通过安装了 Apache 2.4.37 ppa:ondrej/apache2,但无法使mod_deflate(gzip 压缩)正常工作。我正在使用 Ubuntu 18.04 服务器。

mod_deflate 在 Apache 中启用:

sudo apachectl -t -D DUMP_MODULES | grep deflate
deflate_module (shared)

我将代码放入.htaccess

AddOutputFilterByType DEFLATE text/css
RewriteEngine on
RewriteBase /
RewriteCond %{HTTPS} !on
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI} [L,QSA,NE]

.htaccess由 Apache 配置启用(并且重定向工作)。

当我尝试时:curl -I -H 'Accept-Encoding: gzip,deflate' http://myserver/pokus.css

返回:

HTTP/1.1 302 Found
Date: Thu, 24 Jan 2019 12:20:00 GMT
Server: Apache/2.4.37 (Ubuntu)
Location: https://myserver/pokus.css
Content-Type: text/html; charset=iso-8859-1

因此返回的文件未经过压缩。

我也尝试过将 deflate 命令直接添加到 VirtualHost 中,但没有成功。

没有错误消息/var/log/apache2/error.log。Apache 重新启动时也没有错误。

任何想法?

答案1

网络服务器发送 mime-type text/html,而您通过 mime-type 进行过滤text/css

这显然行不通。要么按以下方式过滤text/html(将包括所有 html),要么更新 CSS 的 mime 类型,要么使用AddOutputFiltercss 文件扩展名:

AddOutputFilter css

答案2

我认为响应Content-Type: text/html;没有必要让您失望。但首先,让我们检查一下配置。

  1. mod_deflate取决于mod_filter,因此应启用展位,然后重新启动服务器。

  2. 在文件中/etc/apache2/mods-enabled/deflate.conf可以看到,当满足上述要求时,mod_deflate会启用一些基本设置,因此我们不需要执行任何其他操作即可进行测试。

实际上,您正在寻找包含以下几行内容的响应:

Vary: Accept-Encoding
Content-Encoding: gzip
Content-Type: text/css

问题是当响应标头带有重定向时HTTP 301HTTP 302就像您的情况一样),收到的信息不完整。因此尝试curl返回带有以下标头的 URLHTTP 200,或者采用不同的方法进行测试。


假设服务器端有以下24K大文件:

$ ls -l /var/www/html/test.css 
-rw-r--r-- 1 root root 24K Jan 24 22:10 /var/www/html/test.css

在客户端我们可以使用wget以下方式来测试gzip压缩是否有效:

wget --header="Accept-Encoding: gzip" http://example.com/test.css

如果一切顺利的话,下载的文件test.css应该大约为3K

$ wget --header="Accept-Encoding: gzip" gzip" http://example.com/test.css
...
HTTP request sent, awaiting response... 200 OK
Length: 3045 (3.0K) [text/css]
Saving to: ‘test.css’

test.css   100%[===============================>]   2.97K  --.-KB/s    in 0s

您可以检查下载的文件的内容,它应该是原始文件的不同压缩版本。


参考:

相关内容