我已经通过安装了 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 类型,要么使用AddOutputFilter
css 文件扩展名:
AddOutputFilter css
答案2
我认为响应Content-Type: text/html;
没有必要让您失望。但首先,让我们检查一下配置。
mod_deflate
取决于mod_filter
,因此应启用展位,然后重新启动服务器。在文件中
/etc/apache2/mods-enabled/deflate.conf
可以看到,当满足上述要求时,mod_deflate
会启用一些基本设置,因此我们不需要执行任何其他操作即可进行测试。
实际上,您正在寻找包含以下几行内容的响应:
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Type: text/css
问题是当响应标头带有重定向时HTTP 301
(HTTP 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
您可以检查下载的文件的内容,它应该是原始文件的不同压缩版本。
参考: