Linux课程笔记 Apache的优化
Apache服务优化
1 配置Apache日志轮询
apache自带的日志轮询工具也是可以使用的,但是老师测试会丢日志,所以采用cronolog来配置日志轮询
tar zxf cronolog-1.6.2.tar.gz cd cronolog-1.6.2 ./configure make make install <VirtualHost *:80> ServerAdmin qinbf@etiantian.com DocumentRoot "/var/html/www" ServerName www.etiantian.com ServerAlias etiantian.com ErrorLog "logs/www.etiantiancom-error_log" # CustomLog "logs/www.etiantiancom-access_log" common CustomLog "|/usr/local/sbin/cronolog /application/apache/logs/access_www_%w.log" combined #注意这里要写全路径,%w表示按周轮询 </VirtualHost> |
2 错误页面优雅显示
[root@test3 bin]# grep "ErrorDocument 404" /application/apache/conf/httpd.conf #ErrorDocument 404 /missing.html #ErrorDocument 404 "/cgi-bin/missing_handler.pl" #可以指定404错误提示的页面,可以是URL,也可以是脚本或者文件 |
3 mod_deflate文件压缩功能
3.1 mod_deflate模块介绍
mod_deflate模块提供了DEFLATE输出过滤器,允许服务器在将输出内容发送到客户端之前进行压缩,提升用户体验。
3.2 mod_deflate安装检查
(1) 编译安装httpd情况时是否已经安装mod_deflate,命令为:
[root@test3 ~]# /application/apache/bin/apachectl -l |grep mod_deflate mod_deflate.c |
(2) 如果是以DSO方式编译的(--enable-so开启DSO编译方式),则查看方法为:
[root@test3 ~]# ls /application/apache/modules/ |grep mod_deflate mod_deflate.so [root@test3 ~]# grep mod_deflate.so /application/apache/conf/httpd.conf LoadModule deflate_module modules/mod_deflate.so [root@test3 ~]# /application/apache/bin/apachectl -M |grep deflate deflate_module(dynamic) #static是表示在编译的时候就已经安装了 Syntax OK |
特别说明:以上两种情况不能同时存在,否则会有冲突
3.3 mod_deflate安装
cd /root/tools/httpd-2.2.25/modules/filters /application/apache/bin/apxs -c -a -i mod_deflate.c ll /application/apache/modules/mod_deflate.so
#如果提示冲突,要把/application/apache/conf/httpd.conf文件中,LoadModule deflate_module modules/mod_deflate.so这句命令注释掉。 |
3.4 mod_deflate应用
<ifmodule mod_deflate.c> DeflateCompressionLevel 9 SetOutputFilter DEFLATE DeflateFilterNote Input instream DeflateFilterNote Output outstream DeflateFilterNote Ratio ratio #Logformat ‘ “%r” %{outstream}n/%{instream}n (%{ratio}n%%)’ deflate #CustomLog logs/deflate_log.log deflate </ifmodule>
#把以上这段代码嵌入到/application/apache/conf/extra/httpd-vhosts.conf的/var/html/www配置内容里面(也可以配置到全局目录里面)
<VirtualHost *:80> ServerAdmin qinbf@etiantian.com DocumentRoot "/var/html/www" ServerName www.etiantian.com ServerAlias etiantian.com ErrorLog "logs/www.etiantiancom-error_log" CustomLog "logs/www.etiantiancom-access_log" common <ifmodule mod_deflate.c> DeflateCompressionLevel 9 SetOutputFilter DEFLATE DeflateFilterNote Input instream DeflateFilterNote Output outstream DeflateFilterNote Ratio ratio #Logformat ‘ “%r” %{outstream}n/%{instream}n (%{ratio}n%%)’ deflate #CustomLog logs/deflate_log.log deflate </ifmodule>
</VirtualHost>
测试:把老师的test_deflate.tar.gz压缩包上传到/var/html/www下,然后解压,不需要做任何移动。打开Firefox开发专版,访问192.168.1.4/test/deflate.html,打开firebug,在YSlow中可以看到测试结果。
|
4 mod_expires缓存功能
Expire其实就是通过header报文来指定特定类型的文件在浏览器中的缓存时间。大多数的图片,flash在发布后都不是需要经常修改的,做了缓存以后这样的浏览器以后就不需要再从服务器下载这些文件而是直接从缓存中读取,这样再访问页面的速度会大大加快。
在刚才的mod_deflate模块配置内容下面加入以下配置: ExpiresActive on ExpiresDefault "access plus 12 month" ExpiresByType text/html "access plus 12 months" ExpiresByType text/css "access plus 12 months" ExpiresByType image/gif "access plus 12 months" ExpiresByType image/jpeg "access plus12 12 months" ExpiresByType image/jpg "access plus 12 months" ExpiresByType image/png "access plus 12 months" EXpiresByType application/x-shockwave-flash "access plus 12 months" EXpiresByType application/x-javascript "access plus 12 months" ExpiresByType video/x-flv "access plus 12 months" [root@test3 www]# curl -I 192.168.1.4/01.jpg HTTP/1.1 200 OK Date: Sun, 17 Nov 2013 03:51:45 GMT Server: Apache/2.2.25 (Unix) DAV/2 PHP/5.3.10 Last-Modified: Sun, 07 Nov 2010 12:20:20 GMT ETag: "40904-486f3-4947587f66900" Accept-Ranges: bytes Content-Length: 296691 Cache-Control: max-age=31104000 Expires: Wed, 12 Nov 2014 03:51:45 GMT Vary: Accept-Encoding Content-Type: image/jpeg |
5 更改Apache默认用户
创建一个用户例如Apache(最好起一个不常用的名字),用于子进程和子线程。
useradd -M -s /sbin/nologin apache vi /application/apache/conf/httpd.conf User apache Group apache |
6 worker模式提升并发数
7 屏蔽apache版本等敏感信息
(1) 修改httpd.conf文件,打开httpd-default.conf模块 (2) 修改httpd-default.conf文件,ServerSignature Off以及ServerTokens Prod之后apachectl graceful使设置生效 |
8 apache目录文件权限设置(root,目录755,文件644)
[root@test3 html]# ll 总计 12 drwxr-xr-x 2 root root 4096 09-03 18:51 bbs drwxr-xr-x 5 root root 4096 11-12 01:53 blog drwxr-xr-x 3 root root 4096 11-17 11:43 www |
提示:在网站架构中,应把资源文件,包括用户上传的图片,福建等和程序分离,最好把上传程序也分离,这样就可以从容授权了。
9 开启httpd-mpm.conf增加连接数
10 apache防盗链功能
11 禁止目录Index
Option FollowSymLinks 这一个参数去掉Index选项 |
12 禁止用户覆盖(重载)
AllowOverride None #禁止用户覆盖(重载) #加快服务器速度,因为它不再为每个请求寻找每个目录访问控制问价(.htaccess) |
13 关闭CGI
ScriptAlias /cgi-bin/ "/application/apache2.2.25/cgi-bin/" <Directory "/application/apache2.2.25/cgi-bin"> AllowOverride None Options None Order allow,deny Allow from all </Directory> |
删除以上内容
14 避免使用.htaccess文件(分布式配置文件)
首先从性能上,就应该避免使用.htaccess文件
15 apache安装模块
(mod_evasive20防DDOS、mod_limitipconn(针对单站点)配置、mod_security防SQL注入等 makejail http://www.floc.net/makejail 是一个自动把建立jail所需要的程序放到jail内的软件 mod_security http://www.modsecurity.org 是apache的一个模块,他有请求过滤,日志审计等功能,可以防止SQL Injection,跨站脚本攻击,很不错的一个模块 |
16 正确途径取得源代码,勤打apache补丁
17 apache日志授予root700权限
chown -R root.root logs chmod -R 700 logs |
18 系统内核参数优化
19 禁止PHP解析指定站点目录
20 使用tmps文件系统替代频繁访问的目录
21 尽可能减少HTTP请求数
22 使用CDN做网站加速
23 apache程序架构优化
1) 程序页面服务器 2)图片附件服务器 3)上传服务器 三者的功能尽量分离 a) 分离最佳方式是分别使用独立的服务器(需要程序支持) b) 次选方案在前端负载均衡器通过haproxy/nginx根据目录或扩展名请求后面对应的服务器 |