Apache深度优化

博文结构
Apache的Gzip(deflate)功能
Apache的缓存设置
Apache禁止目录遍历
Apache隐藏版本目录
Apache日志分割
Apache配置防盗链

关于apache源码包安装参考apache安装及工作模式

一.apache的Gzip(deflate)功能

开启 apache 的 Gzip(deflate)功能 gzip 可以极大的加速网站,有时压缩比率高到 80%,最少都有 40%以上,还是相当不错的。 在 Apache2 之后的版本,模块名不叫 gzip,而叫 mod_deflate

  • 未使用 Gzip

Apache深度优化

  • 开启使用

Apache深度优化

  • 如果要使用gzip(deflate)的功能,一定要打开两个模块
    注:进入主配置文件里面把前面#号去掉就可以
    如图:
    [root@localhost ~]# vim /usr/local/http-2.4.23/conf/httpd.conf
    Apache深度优化
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:表示需要执行编译操作。
  • 在安装时会报错如图:

Apache深度优化

  • 这是需要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
Apache深度优化
[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
Apache深度优化

[root@localhost /]# apachectl -t
Syntax OK
[root@localhost /]# apachectl restart
  • 可以看到页面已经被压缩

Apache深度优化

  • 查看日志
[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缓存的效果

Apache深度优化

  • 启用 expire 缓存

进入主配置里面搜索expires把前面#去掉

[root@localhost ~]# vim /usr/local/http-2.4.23/conf/httpd.conf

Apache深度优化

  • 然后添加 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>
  • 测试效果如下:

Apache深度优化

其中<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

Apache深度优化

Apache深度优化

报403没有权限访问

显示目录结构:把主配置文件里面刚删除的写回来

Apache深度优化

报200访问成功

apache隐藏版本

  • 默认 apache 的状态信息

Apache深度优化

  • 这样轻易的出现在互联网上,显然是不安全的。可以通过以下操作进行优化处理,方法如下:

[root@localhost /]# vim /usr/local/http-2.4.23/conf/httpd.conf
进入主配置文件把前面#号去掉

Apache深度优化

  • 修改 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 测试

Apache深度优化

[root@localhost /]# apachectl restart
[root@localhost /]# curl -I 127.0.0.1

  • 可以看到apache版本号被隐藏了
    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  # 
上一篇:Java Deflater中的SYNC_FLUSH / FULL_FLUSH参数:与DEFLATE块有关系吗?


下一篇:HTTP 协议中你必须知道的三种数据格式