apache的优化方法
网页压缩
- 提高网站访问速度的重要影响因素
- 方法
- gzip与deflate
- gzip流行的文件压缩算法
- deflate工具apache2.x的内置压缩工具
- 流程
- 服务器接收http请求先分析客户端支持那种压缩。
- 请求报文
- 检查文件后缀,如果是静态资源,则会在缓存中查找最新压缩文件并向客户端返回结果,如果没有,则压缩后在发送到客户端,再把压缩放到缓存目录中。
- 如果是动态资源,则压缩后直接发送,不会将压缩文件放到缓存中。
- 配置
- 在编译时指定该功能(一般建议直接这样做)
- --enable-deflate
- 到主配置文件中搜索defleate找到该模块并启用,再在其下方添加模块配置参数,具体如下
- <IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript text/jpg text/png DeflateCompressionLevel 9 SetOutputFilter DEFLATE </IfModule>
- 分别表示压缩的对象,压缩的级别,压缩的方式
- 如果没有配置该模块但开启了DSO模块(动态扩展模块)
- 那么利用apache自带的apxs工具可以进行动态的扩展。
- 进入到源码包目录,在/modules/filters下有许多模块,如果有mod_deflate.c模块。那么执行如下命令
- apxs -i -c -a mod_deflate.c
- -i 表示安装
- -c 表示编译器
- -a 表示激活(activation)
- 之后进入主配置文件中搜索deflate进行检查是否加载该模块
- LoadModule deflate_module modules/mod_deflate.so
- 并在下方添加该模块配置参数
- <IfModule mod_deflate.c> DeflateCompressionLevel 6 SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE text/html text/plain text/xml text/csstext/javascript application/x-javascript application/javascript application/json 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 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 </IfModule>
- 添加的主要配置参数,压缩等级,压缩方法,压缩对象,其他都是细节处理,暂不要求
- 需要注意:deflate是基于gzip的,因此要确保有zlib-devel该软件包,如果没有指定,那么需要在启用模块语句上方添加该语句
- LoadFile /usr/lib64/libz.so
- 之后检测语法有无问题,并进行测试看是否有相关属性出现
网页缓存
- 通过在服务器中配置相关策略可以对客户端的缓存内容设置生存周期,避免长期占用资源
- 配置
- 在主配置文件中启用该模块
- LoadModule expires_module modules/mod_expires.so
- 在模块下方添加如下语句
- <IfModule mod_expires.c> ExpiresActive On ExpiresDefault "access plus 60 seconds" </IfModule>
- 分别表示激活该模块,默认的生存期限
- 重启服务并进行验证
- 注意该时间是零时区的时间
隐藏版本信息
- 在extra扩展模块配置文件中,default配置文件中寻找Token 将其修改为Prod
防盗链
- 在进行网页浏览时,页面信息是由一条条请求展示出来的,一些通过链接展示出来的资源,会被盗取链接,被盗取链接后,点击流量是别人的,消耗的资源确实自己的。
- 方法
- 根据apache内置的REFERER变量提取出url信息,通过正则表达式进行过滤后再用地址重定向的方式达成防盗链的目的
- 实验配置
- 两台机器
- 被盗者
- 正版网页
- 盗链者
- 盗链网页
- 测试机
- windows
- 在每台主机中添加域名解析条目
- 正版网页首页文件中添加如下语句
- <html> <body> <h1>It work! </h1> <img src="logo.jpg"/> </body> </html>
- img src=“logo.jpg”
- 这决定了网页图片链接
- 盗链网页中添加如下语句
- <html> <body> <h1>dao lian </h1> <img src="http://www.benet.com/logo.jpg" /> </body> </html>
- <img src="http://www.benet.com/logo.jpg" />
- 该语句决定了我要盗取正版网页的链接
- 利用开发者工具查看网页与图片的url是否对应,不对应代表是盗链行为
- 防盗链设置
- 首先开启地址重写功能
- 主配置文件中搜索rewrite,开启该模块
- 然后找到apache网页文档存放目录的权限参数配置区域,一般默认为<Directory "/usr/local/httpd/htdocs">
- 在其AllowOverride None下方写入正则表达式与重写规则
- RewriteEngine On RewriteCond %{HTTP_REFERER} !^http://benet.com/.*$ [NC] RewriteCond %{HTTP_REFERER} !^http://benet.com$ [NC] RewriteCond %{HTTP_REFERER} !^http://www.benet.com/.*$ [NC] RewriteCond %{HTTP_REFERER} !^http://www.benet.com/$ [NC] RewriteRule .*\.(gif|jpg|swf)$ http://www.benet.com/error.png
- [ ]:条件标志
- [NC] - No Case. 进行不区分大小写的匹配。
- 上述配置完毕后进行测试,看重定向的结果是否是我们规定的结果。