博文结构
Apache的Gzip(deflate)功能
Apache的缓存设置
Apache禁止目录遍历
Apache隐藏版本目录
Apache日志分割
Apache配置防盗链
关于apache源码包安装参考apache安装及工作模式
一.apache的Gzip(deflate)功能
开启 apache 的 Gzip(deflate)功能 gzip 可以极大的加速网站,有时压缩比率高到 80%,最少都有 40%以上,还是相当不错的。 在 Apache2 之后的版本,模块名不叫 gzip,而叫 mod_deflate
- 未使用 Gzip
- 开启使用
- 如果要使用gzip(deflate)的功能,一定要打开两个模块
注:进入主配置文件里面把前面#号去掉就可以
如图:
[root@localhost ~]# vim /usr/local/http-2.4.23/conf/httpd.conf
LoadModule deflate_module modules/mod_deflate.so
//模块的作用:对传输到客户端的代码进行gzip压缩
LoadModule headers_module modules/mod_headers.so
/模块的作用:告诉客户端的浏览器,传输的文件使用了gzip压缩。如果不开启的话,则无法正常显示网页内容
- mod_deflate 模块检查及安装
[root@localhost ~]# cd /usr/src/httpd-2.4.23/modules/filters/
//切换到Apache源码包mod_deflate所在的目录下
[root@localhost filters]# /usr/local/http-2.4.23/bin/apxs -c -i -a mod_deflate.c
//使用apxs命令进行安装
- apxs命令参数的解释:
-i:表示需要执行安装操作,以安装一个或多个动态共享对象到服务器的modules目录中;
-a:表示会自动增加一个 LoadModule 行到 httpd.conf 文件中,以启用此模块,或者,如果 此行已经存在,则启用之;
-c:表示需要执行编译操作。
- 在安装时会报错如图:
- 这是需要yum安装zlib-devel
[root@localhost ~]# yum -y install zlib-devel
- 在Apache主配置文件的 LoadModule deflate_module modules/mod_deflate.so 这行的上一行添加
- LoadFile /usr/local/zlib/lib/libz.so
[root@localhost /]# vim /usr/local/http-2.4.23/conf/httpd.conf
[root@localhost /]# apachectl -t
Syntax OK
[root@localhost /]# apachectl restart
-
接下来修改Apache主配置文件,使其开启gzip压缩传输功能
- 在Apache主配置文件中在末尾添加如下内容:
[root@localhost /]# vim /usr/local/http-2.4.23/conf/httpd.conf
<IfModule mod_deflate.c>
DeflateCompressionLevel 9
SetOutputFilter DEFLATE
AddOutputFilterByType DEFLATE text/*
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ 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
解释:
<IfModule mod_deflate.c>
DeflateCompressionLevel 9
\\压缩程度的等级,预设可以采用 6 这个数值,以维持 耗用处理器效能与网页压缩质量的平衡
SetOutputFilter DEFLATE
\\设置输出过滤器,对输出启用压缩,必须的,就像一个 开关一样,告诉 apache 对传输到浏览器的内容进行压缩
AddOutputFilterByType DEFLATE text/*
\\设置对文件是文本的内容进行压缩,例如 text/html text/css text/plain 等.
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
\\设置不对后缀 gif,jpg,jpeg,png 的图片文件进行压缩。注:?:表示不会捕获 ( )里内容了
</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
//指定日志的存放路径
- 修改完成后保存退出并重启 httpd 服务,使用浏览器测试访问,如下图显示结果:(提示:在访问测试页之前按 F12 键)
注:访问之前需要把网页内容调的大一些,多复制几行
[root@localhost /]# vim /usr/local/http-2.4.23/htdocs/index.html
[root@localhost /]# apachectl -t
Syntax OK
[root@localhost /]# apachectl restart
- 可以看到页面已经被压缩
- 查看日志
[root@localhost ~]# cat /usr/local/http-2.4.23/logs/deflate_log.log
"GET / HTTP/1.1" 77/5265 (1%)
"GET /favicon.ico HTTP/1.1" -/- (-%)
"GET / HTTP/1.1" 77/5265 (1%)
"GET / HTTP/1.1" 77/5265 (1%)
[root@localhost ~]#
注:图片是不需要启用 GZip 压缩的,从 GZip 检测结果来看,压缩后的图片体积竟然大过原 体积!这就解释了为什么图片不用启用 GZip 压缩的原因了
apache的缓存配置
这个是非常有用的优化,mod_expires 可以减少 20-30%左右的重复请求,让重复的用户对指定 的页面请求结果都 CACHE 在本地,根本不向服务器发出请求。但要注意更新快的文件不要 这么做。 这个模块控制服务器应答时的 Expires 头内容和 Cache-Control 头的 max-age 指令。有效期 (expiration date)可以设置为相对于源文件的最后修改时刻或者客户端的访问时刻
- 未启用 mod_expires模块expire缓存的效果
- 启用 expire 缓存
进入主配置里面搜索expires把前面#去掉
[root@localhost ~]# vim /usr/local/http-2.4.23/conf/httpd.conf
- 然后添加 Expires 配置规则 (在Apache主配置文件末尾添加以下内容)
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/html "access plus 2 minute"
ExpiresByType image/jpeg "access plus 1 mouth"
ExpiresDefault "now plus 0 minute"
</IfModule>
注释:
<IfModule mod_expires.c>
//表示启用expires模块
ExpiresActive On
//启用expires功能
ExpiresByType text/html "access plus 2 minute"
//设置后缀为html的文本文件保存时间为两分钟
ExpiresByType image/jpeg "access plus 1 mouth"
//设置后缀为jpeg的图片信息保存时间为一个月
ExpiresDefault "now plus 0 minute"
//其他默认没有被定义的不进行缓存
</IfModule>
- 测试效果如下:
其中<base>是下列之一:
• access
• now (等价于'access ')
• modification
plus 关键字是可选的。<num>必须是整数,<type>是下列之一:
• years
• months
• weeks
• days
• hours
• minutes
• seconds
- Apache禁止目录遍历
将 Options Indexes FollowSymLinks 中的 Indexes 去掉,就可以禁止 Apache 显示该目录结构
Indexes 的作用就是当该目录下没有 index.html 文件时,就显示目录结构。
[root@localhost ~]# cd /usr/local/http-2.4.23/htdocs/
[root@localhost htdocs]# mv index.html /index.html.bak
[root@localhost htdocs]# mkdir aaa
[root@localhost htdocs]# mkdir 123
[root@localhost htdocs]# vim /usr/local/http-2.4.23/conf/httpd.conf
[root@localhost htdocs]# apachectl restar
[root@localhost ~]# vim /usr/local/http-2.4.23/conf/httpd.conf
[root@localhost ~]# apachectl restart
报403没有权限访问
显示目录结构:把主配置文件里面刚删除的写回来
报200访问成功
apache隐藏版本
- 默认 apache 的状态信息
- 这样轻易的出现在互联网上,显然是不安全的。可以通过以下操作进行优化处理,方法如下:
[root@localhost /]# vim /usr/local/http-2.4.23/conf/httpd.conf
进入主配置文件把前面#号去掉
- 修改 httpd-default.conf
[root@localhost /]# vim /usr/local/http-2.4.23/conf/extra/httpd-default.conf
找到 ServerTokens Full ServerSignature On 改成 ServerTokens Prod ServerSignatureoff 重启 apache 测试
[root@localhost /]# apachectl restart
[root@localhost /]# curl -I 127.0.0.1
-
可以看到apache版本号被隐藏了
- 如果你需要彻底将版本之类的信息进行改头换面,你就需要在编译之前做准备或者进行从新 编译了。在重新编译时,修改源码包下 include 目录下的 ap_release.文件
#define AP_SERVER_BASEVENDOR "Apache Software Foundation" #服务的供应商名称
#define AP_SERVER_BASEPROJECT "Apache HTTP Server" #服务的项目名称
#define AP_SERVER_BASEPRODUCT "Apache"
#服务的产品名
#define AP_SERVER_MAJORVERSION_NUMBER 2 #主要版本号
#define AP_SERVER_MINORVERSION_NUMBER 4 #小版本号
#define AP_SERVER_PATCHLEVEL_NUMBER 23 #补丁级别
#define AP_SERVER_DEVBUILD_BOOLEAN 0 #