周日愉快,雷阵雨。
1: 开启 apache 的 Gzip(deflate)功能 (压缩):
gzip 可以极大的加速网站,有时压缩比率高到 80%,最少都有 40%以上,还是相当不错的。 在 Apache2 之后的版本,模块名不叫 gzip,而叫 mod_deflate.
如果要开启 deflate 的话,一定要打开下面二个模块:
mod_deflate 模块检查及安装:
如果没有安装:
a.编译时安装方法 编译的时候跟上–enable-deflate 即可实现安装
b.DSO 方式安装 [root@www ~]# cd /root/httpd-2.4.23/modules/filters/ #切到 apache 源码包 mod_deflate 所在 的目录下 # /usr/local/http-2.4.23/bin/apxs -c -i -a mod_deflate.c #以 dso 的方式编译安装到 apache 中 # /usr/local/http2.2/bin/apxs -c -i -a /root/httpd-2.2.17/modules/metadata/mod_headers.c#以 dso 的方式编译安装到 apache 中
如果报错:
原因是缺少 zlib-devel 的安装包,装上就可以了。
apxs 命令参数说明:
-i 此选项表示需要执行安装操作,以安装一个或多个动态共享对象到服务器的 modules 目 录中。
-a 此选项自动增加一个 LoadModule 行到 httpd.conf 文件中,以启用此模块,或者,如果 此行已经存在,则启用之。
-c 此选项表示需要执行编译操作。
重新启动 httpd:
修改 Apache 配置文件开启 gzip 压缩传输: http.conf 修改、增加配置参数:(刚才已注释掉)
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
先将上面两行配置前面的#号去掉,这样 apache 就会启用这两个模块, 其中 mod_deflate 是压缩模块,就是对要传输到客户端的代码进行 gzip 压缩;mod_headers 模块的作用是告诉浏览器页面使用了 gzip 压缩,如果不开启 mod_headers 那么浏览器就会 对 gzip 压缩过的页面进行下载,而无法正常显示。 在 httpd.conf 中加入以下代码,可以加到任何空白地方,不了解 apache 的话,如果担心加 错地方,就放到 http.conf 文件的最后一行 注:在添加代码前最好先查一查要添加的代码是否存在
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 的图片文件进行压缩。注:?:表示不会捕获 ( )里内容了
网页设置成这样是为了方便后面的缓存:
查看日志:
注:图片是不需要启用 GZip 压缩的,从 GZip 检测结果来看,压缩后的图片体积竟然大过原 体积!这就解释了为什么图片不用启用 GZip 压缩的原因了!
可以检测了几个门户网站的图片,还有 Google、baidu 的图片,统统都没有启用图片 GZip 压缩,只是启用了 html、css、js 等文件的 GZip 压缩,这就更加说明了 GZip 压缩不适用于图 片上。另外,除了图片之外,flash 的 swf 文件也是不用启用 GZip 压缩的
2:开启mod_expires 模块 Apache的缓存功能:
配置 mod_expires 模块 这个非常有用的优化,mod_expires 可以减少 20-30%左右的重复请求,让重复的用户对指定 的页面请求结果都 CACHE 在本地,根本不向服务器发出请求。但要注意更新快的文件不要 这么做。 这个模块控制服务器应答时的 Expires 头内容和 Cache-Control 头的 max-age 指令。有效期 (expiration date)可以设置为相对于源文件的最后修改时刻或者客户端的访问时刻。
未启用 expire 的效果:
启用expires缓存:
然后添加 Expires 配置规则:(最后一行添加)
验证:
3、Apache 禁止目录遍历:
Indexes 的作用就是当该目录下没有 index.html 文件时,就显示目录结构。
4、apache 隐藏版本信息 测试默认 apache 的状态信息:
2、修改 httpd-default.conf 文件:/usr/local/http-2.4.23/conf/extra/httpd-default.conf 找到
ServerTokens Full ServerSignature On 改成 ServerTokens Prod ServerSignatureoff 重启 apache 测试
测试隐藏版本号后 apache 的状态信息:
三:Apache日志切割:
为什么要分割日志:
随着网站的访问越来越大,WebServer 产生的日志文件也会越来越大,如果不对日志进行分 割,那么只能一次将大的日志(如 Apache 的日志)整个删除,这样也丢失了很多对网站比较 宝贵的信息,因为这些日志可以用来进行访问分析、网络安全监察、网络运行状况监控等, 因此管理好这些海量的日志对网站的意义是很大的。
方法 1:使用 rotatelogs(apache 自带的工具)每隔一天记录一个日志
编辑 Apache 的主配置文件,更改内容如下: 注释掉如下两行
ErrorLog logs/error_log
CustomLog logs/access_log common
然后添加如下两行:
注:其中 86400 为轮转的时间单位为秒
验证:查看 logs 目录下的日志文件
由于 apache 自带的日志轮询工具 rotatelogs,据说在进行日志切割时容易丢日志,因此我们 通常使用 cronolog 进行日志轮询。
方法 2、使用 cronolog 为每一天建立一个新的日志 安装 cronolog 程序 下载 cronolog
[root@www ~]# tar zxf cronolog-1.6.2.tar.gz
[root@www ~]# cd cronolog-1.6.2/
[root@www cronolog-1.6.2]# ./configure && make && make install
主配置文件中的使用方法
ErrorLog “|/usr/local/sbin/cronolog logs/error-%Y%m%d.log”
CustomLog “|/usr/local/sbin/cronolog logs/access-%Y%m%d.log” combined 如果 Apache 中有多个虚拟主机,最好每个虚拟主机中放置一个这样的代码,并将日志文件 名改成不同的名字。
验证:查看 logs 目录下的日志文件:
四:开启Apache防盗链功能:在Apache主配置文件中:
有时候,你的网站莫名其妙的访问量变大,不要高兴的太早,有可能是被别人盗链了。 举个例子:比如你搭了个 discuz 论坛,里面有些热点图片、视频;然后别人将他网站上访问 图片的地址重定向到你的 discuz 上,这样他的服务器就可以空闲出来了;也就是说别人访问 他网站的图片视频,消耗的确是你服务器的资源; 解决这个问题的方法是配置下防盗链,让外来的盗不了链;
在另一台Linux服务器上安装Apache,并且更改网页:
验证:当我们访问第二台服务器的网页时,其实是跳转到了第一台服务器的网页上。
补充:
注:相关选项的解释 1.RewriteEngine On #启用 rewrite,要想 rewrite 起作用,必须要写上
2.RewriteCond test-string condPattern #写在 RewriteRule 之前,可以有一或 N 条,用于测试 rewrite 的匹配条件,具体怎么写,后面会详细说到。
3.RewriteRule Pattern Substitution #规则
4. %{HTTP_REFERER}:服务器变量,HTTPReferer 是 header 的一部分,当浏览器向 web 服务器发送请求的时候,一般会带上 Referer,告诉服务器我是从哪个页面链接过来的,服 务器藉此可以获得一些信息用于处理。比如从我主页上链接到一个朋友那里,他的服务器就 能够从 HTTP Referer 中统计出每天有多少用户点击我主页上的链接访问他的网站。
5.[ NC]指的是不区分大小写,[R]强制重定向 redirect 6. 字母 L 表示如果能匹配本条规则,那么本条规则是最后一条(Last),忽略之后的规则
6.RewriteCond %{HTTP_REFERER} !^$ 上面这一行意在允许空“HTTP_REFERER”的访问,即允许用户在浏览器地址栏中直接输入 图片地址时图片文件的显示。
7.RewriteCond %{HTTP_REFERER} !benet.com/.$ [NC] RewriteCond %{HTTP_REFERER} !www.benet.com/.$ [NC] 设置允许访问的 HTTP 来源,包括网站自身。 8.RewriteRule .*.(gif|jpg|swf)$ http://www.benet.com/about/nolink.png [R,NC,L] 将不满足 referer 条件的访问重定向至 nolink.png。 nolink.png 位于允许“盗链”的目录 about 中,要相当注意,不然,警告信息和图片将无法在对方网站上显示。
注意:测试时要清除济浏览器缓存