突然间发现自己用 VPS 搭的网站都没有开启 gzip 压缩,于是上网搜了 Apache 开启 gzip 压缩的方法,这里做一个总结。
教程在网上一搜一大把,这里没有原理,没有说明,只有最终的解决方案( ̄▽ ̄)
(^・ω・^ )卖个萌
Q:如何判断浏览器支持哪种压缩模块?
A:在发送(Request)的 HTTP 头里找到 Accept-Encoding
,gzip 和 deflate 对应支持 mod_gzip
和 mod_deflate
模块。
Q:如何判断一个页面或文件使用了 gzip 压缩?
A:在请求(Response)的 HTTP 头里找到 Content-Encoding
,若有 gzip 或 deflate 则表示使用了 gzip 压缩,反之没开启。
Q:如何开启 Apache 的 gzip 压缩?
A:第一步,启用 mod_deflate
和 mod_headers
模块
Bash
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 来实现一句话写入,但是试了很多方法都失败了,只好多一个步骤
Bash
# 在第一个 </IfModule> 下面添加标记
sed -i '0,/^<\/IfModule>/{/^<\/IfModule>/a\
PUTIN_TMP
}' /usr/local/apache/conf/httpd.conf
# 说明:
# SetOutputFilter DEFLATE 告诉 Apache 要对页面进行压缩
# 第一个 SetEnvIfNoCase 表示不压缩图片
# 第二个 SetEnvIfNoCase 表示不压缩文件
# 第三个 SetEnvIfNoCase 表示不压缩视频
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
# 重新启动 Apache 服务
/etc/init.d/httpd restart
说白了就是在 httpd.conf
中添加以下代码,重新启动 Apache 就行了:
Plaintext
<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