一、开启apache的Gzip(deflate)功能
gzip可以极大的加速网站,压缩比率通常在40%~80%之间,在之前的版本中,Gizp是第三方压缩工具,但是在Gzip 2版本后,Apache自己开发了deflate模块,用来实现压缩功能。
如果要开启apache的压缩功能,需要在编译安装apache时,增加“–enable-deflate”配置项,并且必须在主配置文件中打开下面两个模块:
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
注意:如果在编译安装时,没有增加“–enable-deflate”选项,可以使用DSO方式安装此功能,如下:
[root@www ~]# cd /root/httpd-2.4.23/modules/filters/ #切换至apache 源码包 mod_deflate 所在的目录下
[root@www ~]# /usr/local/http-2.4.23/bin/apxs -c -i -a mod_deflate.c #以 dso 的方式编译安装到 apache 中
如果报错如下:
此报错是缺少zlib-devel的安装包,直接执行“yum -y install zlib-devl”进行安装即可,然后再次安装deflate功能。
确认安装成功:
[root@www filters]# ll /usr/local/http-2.4.23/modules/mod_deflate.so #检查 mod_deflate 是否安装,成功安装这里会显示出该文件
关于上面执行的命令“/usr/local/http-2.4.23/bin/apxs -c -i -a mod_deflate.c”。
选项解释如下:
-c:表示需要执行编译操作;
-i:表示需要执行安装操作,以安装一个或多个动态共享对象到服务器的modeles目录中。
-a:此选项是自动增加一个LoadModule 行到 httpd.conf 文件中,以启用此模块,或者,如果此行已经存在,则启用它。
安装完成后,默认是启用了这两个模块的,但是检查apache的主配置文件时,可能会报错,如下:
至此,压缩功能就开启了,接下来配置压缩的功能。
在apache的主配置文件的末尾写入以下内容(在添加代码前最好先确定以下代码是否存在):
<IfModule mod_deflate.c> <!--deflate模块配置-->
DeflateCompressionLevel 6 <!--压缩等级范围0-9,数字越大,压缩比越高,建议取中,否则会加大CPU的压力-->
SetOutputFilter DEFLATE <!--设置输出过滤器,对输出启用压缩,就像一个开关一样,告诉apache对传输到浏览器的内容进行压缩-->
AddOutputFilterByType DEFLATE text/*
<!--设置对文件是对文本的内容进行压缩,如text/html text/css text/plain等-->
AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript application/javascript application/x-javascript
<!--对JavaScript文件进行压缩-->
AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp
<!--对php类型的文件进行压缩-->
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
<!--设置图片类型不进行压缩,图片压缩后的大小可能超过原来的大小,而且可能会失真,所以不对图片进行压缩。注:?号表示不会捕获()里的内容了-->
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
<!--同上,就是设置不对 exe,tgz,gz 等的文件进行压缩-->
SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary
<!--同上就是设置不对 pdf,avi,mp3 等的文件进行压缩-->
</IfModule>
<!--以下是设置压缩信息的日志输出-->
DeflateFilterNote Input input_info <!--声明输入流的 byte 数量-->
DeflateFilterNote Output output_info <!--声明输出流的 byte 数量-->
DeflateFilterNote Ratio ratio_info <!--声明压缩的百分比-->
LogFormat '"%r" %{output_info}n/%{input_info}n (%{ratio_info}n%%)' deflate <!--声明日志格式-->
CustomLog logs/deflate_log.log deflate <!--指定日志的存放路径-->
可根据上面的配置,定义自己需要的压缩项目,要压缩的文件类型根据自己所需要的配置即可(注:除了图片之外,flash 的 swf 文件也是不用启用 GZip 压缩的)
去除注释后的代码如下:
<IfModule mod_deflate.c>
DeflateCompressionLevel 6
SetOutputFilter DEFLATE
AddOutputFilterByType DEFLATE text/*
AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript application/javascript application/x-javascript
AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary
</IfModule>
DeflateFilterNote Input input_info
DeflateFilterNote Output output_info
DeflateFilterNote Ratio ratio_info
LogFormat '"%r" %{output_info}n/%{input_info}n (%{ratio_info}n%%)' deflate
CustomLog logs/deflate_log.log deflate
修改完成后,保存退出并且重启http服务,使用谷歌浏览器访问(在访问前按“F12”),即可看到压缩相关的信息(最好修改网页的文件,使其大一些,否则不会启用压缩,看不到效果),如下:
查看压缩信息产生的日志:
[root@apache http-2.4.23]# cat logs/deflate_log.log #查看压缩日志
"GET / HTTP/1.1" 74/4545 (1%) #74表示压缩后的大小,4545表示压缩前的大小,末尾的括号中是压缩率
"GET / HTTP/1.1" 74/4545 (1%)
"-" -/- (-%)
[root@apache http-2.4.23]# ll htdocs/index.html #可以查看网页的大小是否为压缩前的大小“4545”
-rw-r--r--. 1 root root 4545 10月 12 23:00 htdocs/index.html
二、开启expires缓存功能
expires功能可以较少20%~30%左右的重复请求,让重复的用户对指定的页面请求结果都cache在本地,而无需