突然间发现自己用 VPS 搭的网站都没有开启 gzip 压缩,于是上网搜了 Apache 开启 gzip 压缩的方法,这里做一个总结。

教程在网上一搜一大把,这里没有原理,没有说明,只有最终的解决方案( ̄▽ ̄)

(^・ω・^ )卖个萌

 

Q:如何判断浏览器支持哪种压缩模块?

A:在发送(Request)的 HTTP 头里找到 Accept-Encoding,gzip 和 deflate 对应支持 mod_gzipmod_deflate 模块。

 

Q:如何判断一个页面或文件使用了 gzip 压缩?

A:在请求(Response)的 HTTP 头里找到 Content-Encoding,若有 gzip 或 deflate 则表示使用了 gzip 压缩,反之没开启。

 

Q:如何开启 Apache 的 gzip 压缩?

A:第一步,启用 mod_deflatemod_headers 模块

sed -i 's@^#LoadModule\(.*\)mod_deflate.so@LoadModule\1mod_deflate.so@' /usr/local/apache/conf/httpd.conf
sed -i 's@^#LoadModule\(.*\)mod_headers.so@LoadModule\1mod_headers.so@' /usr/local/apache/conf/httpd.conf

Apache 安装方法及路径见之前的博文《编译安装LAMP:Apache篇》

第二步,添加压缩规则

PS:博主水平有限,本来想用 sed a 来实现一句话写入,但是试了很多方法都失败了,只好多一个步骤

sed -i '0,/^<\/IfModule>/{/^<\/IfModule>/a\
PUTIN_TMP
}' /usr/local/apache/conf/httpd.conf
#在第一个</IfModule>下面添加标记

sed -i 's@^PUTIN_TMP@\n<IfModule mod_deflate.c>\
SetOutputFilter DEFLATE\
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png|webp)$ no-gzip dont-vary\
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar|7z|xz)$ no-gzip dont-vary\
SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary\
AddOutputFilterByType DEFLATE text/html text/css text/plain text/xml text/javascript\
AddOutputFilterByType DEFLATE application/x-httpd-php application/x-javascript application/javascript\
</IfModule>@' /usr/local/apache/conf/httpd.conf
#说明:
#SetOutputFilter DEFLATE告诉Apache要对页面进行压缩
#第一个SetEnvIfNoCase表示不压缩图片
#第二个SetEnvIfNoCase表示不压缩文件
#第三个SetEnvIfNoCase表示不压缩视频

/etc/init.d/httpd restart
#重新启动Apache服务

说白了就是在 httpd.conf 中添加以下代码,重新启动 Apache 就行了:

<IfModule mod_deflate.c>
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png|webp)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar|7z|xz)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary
AddOutputFilterByType DEFLATE text/html text/css text/plain text/xml text/javascript
AddOutputFilterByType DEFLATE application/x-httpd-php application/x-javascript application/javascript
</IfModule>

 

Q:哪里可以检测一个页面或文件是否使用了 gzip 压缩?

A:站长之家可以检测,传送门


原创文章,转载请以链接形式注明出处:https://blog.ttionya.com/article-886.html