apache配置说明
- Apache目录结构说明(常用选项)
- ./bin目录
[root@liwenbin apache]# tree -L 1 ./bin
./bin # 程序命令目录
├── ab # apache http服务器性能压力测试工具,类似的jmeter、loadrunner、webbench
├── apachectl # apache的启动命令
├── apxs # apache服务器编译和安装扩展的工具,在进行dso方式模块编译时会用到。
# 例如编译php时就用到:–with-apxs2=/usr/local/apache/bin/apxs
├── htcacheclean # 清理磁盘缓存区的命令,一般少用
├── htpasswd # 建立和更新基本认证文件.例如配置nagio监控时候会用到
├── httpd # 为apache的控制命令程序,apachectl执行的时候会调用到httpd
└── rotatelogs # apache自带日志轮询工具 ,也可以用到cronolog代替。
- ./conf目录
[root@liwenbin apache]# tree -L 1 ./conf
./conf # 配置文件目录
├── extra #额外的Apache配置文件目录
├── httpd.conf #Apache的主配置文件
- /htdocs目录
[root@liwenbin apache]# tree -L 1 ./htdocs/
./htdocs/ #编译安装时默认站点目录
└── index.html #编译安装时默认首页文件
- /logs目录
[root@liwenbin apache]# tree -L 1 ./logs/
./logs/ #默认日志文件存放
├── access_log # 访问日志
├── error_log # 错误日志
└── httpd.pid # 记录主进程号
- /modules目录
[root@liwenbin apache]# tree -L 1 ./modules/
./modules/ #Apache的模块目录,比如php、memcache等模块编译后都在这里
└── httpd.exp
- ./conf/extra/目录
[root@liwenbin apache]# tree -L 1 ./conf/extra/
./conf/extra/
├── httpd-autoindex.conf
├── httpd-dav.conf #dav支持配置
├── httpd-default.conf # 相关的服务参数如超时时间,保持连接时间等
├── httpd-info.conf
├── httpd-languages.conf #语言支持配置
├── httpd-manual.conf
├── httpd-mpm.conf #服务器池管理。如选择apache模式及配置连接数
├── httpd-multilang-errordoc.conf
├── httpd-ssl.conf #SSL支持配置
├── httpd-userdir.conf
2.Apache主配置文件httpd.conf
[root@backup conf]# egrep -v “#|^$” httpd.conf|nl
1 ServerRoot “/application/apache2.2.27” # apache根目录,应只能root访问,一般不需要修改
2 Listen 80 # apache监听端口,墨认80,如果同时监控81可以加一行:Listen 81
3 <IfModule !mpm_netware_module>
4 <IfModule !mpm_winnt_module>
5 User daemon # apache的用户,默认为daemon,建议修改,如apache
6 Group daemon # apache的用户组,默认为daemon,建议修改,如apache
7 </IfModule>
8 </IfModule>
9 ServerAdmin you@example.com # 系统管理员的邮箱,此项为非重要选项,当网站出现问题时,面面会显示此页面地址
10 DocumentRoot “/application/apache2.2.27/htdocs” #apache默认的web站点目录,路径结尾不要添加斜线
#11-16 行,对根目录的控制
11 <Directory />
12 Options FollowSymLinks #FollowSymLinks表示允许使用符号连接,没加的选项默认为禁用
13 AllowOverride None #禁止用户对目录配置文件(.htaccess)重载。普通站点建议不开
14 Order deny,allow #deny优先,没有明确说拒绝都将通过,类似去商场,随便进,除非保安不让进(即下面的拒绝规则)
15 Deny from all #明确指出,拒绝所有访问
16 </Directory>
# 17-22对默认apache站点目录限制配置,如果读者配置了新站点目录而没配置这里会出现403错误
17 <Directory “/application/apache2.2.27/htdocs”>
18 Options Indexes FollowSymLinks #Indexes表示允许目录浏览,这很危险,应取消掉
19 AllowOverride None
20 Order allow,deny #allow优先,没有明确允许都拒绝访问,类似去电影院,没票不能进,必须要有票 Apache优化,应该去掉或前面加-
21 Allow from all #明确指出,允许所有访问
22 </Directory>
23 <IfModule dir_module>
24 DirectoryIndex index.html #配置默认的apache首页,如果虚拟主机未配置,默认应用这里的配置。可以有多个,以空格隔开,调用时前面优先匹配
25 </IfModule>
26 <FilesMatch “^\.ht”> #防止.htaccess和.htpasswd等重要隐藏文件被用户查看
27 Order allow,deny
28 Deny from all
29 Satisfy All
30 </FilesMatch>
31 ErrorLog “logs/error_log” #错误日志路径
32 LogLevel warn
33 <IfModule log_config_module>
34 LogFormat “%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”” combined
35 LogFormat “%h %l %u %t \”%r\” %>s %b” common #普通访问日志格式
36 <IfModule logio_module>
37 LogFormat “%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\” %I %O” combinedio
38 </IfModule>
39 CustomLog “logs/access_log” common #默认站点访问日志配置
40 </IfModule>
#41-51行为cgi配置,没有特殊需求应考虑全部注掉或者干脆删了
41 <IfModule alias_module>
42 ScriptAlias /cgi-bin/ “/application/apache2.2.27/cgi-bin/”
43 </IfModule>
44 <IfModule cgid_module>
45 </IfModule>
46 <Directory “/application/apache2.2.27/cgi-bin”>
47 AllowOverride None
48 Options None
49 Order allow,deny
50 Allow from all
51 </Directory>
52 DefaultType text/plain #定义当不能确定MIME类型时服务器提供的默认值
53 <IfModule mime_module>
54 TypesConfig conf/mime.types
55 AddType application/x-compress .Z
56 AddType application/x-gzip .gz .tgz
57 </IfModule>
58 <IfModule ssl_module>
59 SSLRandomSeed startup builtin
60 SSLRandomSeed connect builtin
61 </IfModule>
3.虚拟主机配置文件(httpd-vhosts.conf)
[root@liwenbin extra]# egrep -v “#|^$” httpd-vhosts.conf|nl
1 NameVirtualHost *:80 #表示使用基于名称的虚拟主机配置。*表示本机所有IP,可以改成具体IP
2 <VirtualHost *:80> #定义一个虚拟主机,监听本机所有IP地址的80端口
3 ServerAdmin webmaster@dummy-host.example.com #管理员信箱,如果没有找主配置文件
4 DocumentRoot “/application/apache2.2.27/docs/dummy-host.example.com” #站点目录
5 ServerName dummy-host.example.com #域名
6 ServerAlias www.dummy-host.example.com #别名
7 ErrorLog “logs/dummy-host.example.com-error_log” #错误日志
8 CustomLog “logs/dummy-host.example.com-access_log” common #访问日志
9 </VirtualHost>
4.多路处理模块(MPM)(httpd-mpm.conf)
[root@liwenbin extra]# egrep -v “#|^$” httpd-mpm.conf|nl
1 <IfModule !mpm_netware_module>
2 PidFile “logs/httpd.pid” #主进程ID文件
3 </IfModule>
4 <IfModule !mpm_winnt_module>
5 <IfModule !mpm_netware_module>
6 LockFile “logs/accept.lock” #锁文件
7 </IfModule>
8 </IfModule>
##设置prefork多路处理模块(如果没有指定会默认)
9 <IfModule mpm_prefork_module>
10 StartServers 5 #StartServers:设置服务器启动时建立的子进程数量。因为子进程数量动态的取决于负载的轻重,所有一般没有必要调整这个参数
11 MinSpareServers 5 #设置空闲子进程的最小数量。所谓空闲子进程是指没有正在处理请求的子进程。如果当前空闲子进程数少于MinSpareServers ,那么Apache将以最大每秒一个的速度产生新的子进程。只有在非常繁忙机器上才需要调整这个参数。将此参数设的太大通常是一个坏主意
12 MaxSpareServers 10 #设置空闲子进程的最大数量。如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进 程。只有在非常繁忙机器上才需要调整这个参数。将此参数设的太大通常是一个坏主意。如果你将该指令的值设置为比MinSpareServers小,Apache将会自动将其修改成”MinSpareServers+1″
13 MaxClients 150 #用于伺服客户端请求的最大请求数量(最大子进程数),任何超过MaxClients限制的请求都将进入等候队列。默认值是150,如果要提高这个值必须同时提高ServerLimit的值。笔者建议将初始值设为(以Mb为单位的最大物理内存/2),然后根据负载情况进行动态调整。比如一台4G内存的机器,那么初始值就是4000/2=2000。
14 MaxRequestsPerChild 0 #设置每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为”0″,子进程将永远不会结束。将MaxRequestsPerChild设置成非零值有两个好处:可以防止(偶然的)内存泄漏 无限进行而耗尽内存;给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。 如果设置为非零值,笔者建议设为10000-30000之间的一个值。
15 </IfModule>
公式: MaxClients<=ServerLimit
#设置worker多路处理模块
16 <IfModule mpm_worker_module>
17 StartServers 2 #StartServers:设置服务器启动时建立的子进程数量。因为子进程数量动态的取决于负载的轻重,所有一般没有必要调整这个参数。
18 MaxClients 150 #用于伺服客户端请求的最大接入请求数量(最大线程数)。任何超过MaxClients限制的请求都将进入等候队列。默认值 是”400″,16 (ServerLimit)乘以25(ThreadsPerChild)的结果。因此要增加MaxClients的时候,你必须同时增加 ServerLimit的值。笔者建议 将初始值设为(以Mb为单位的最大物理内存/2),然后根据负载情况进行动态调整。比如一台4G内存的机器,那么初始值就是4000/2=2000。
19 MinSpareThreads 25 #最小空闲线程数,默认值是”75″。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太少, 子进程将产生新的空闲线程。
20 MaxSpareThreads 75 #设置最大空闲线程数。默认值是”70″。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数 太多,子进程将杀死多余的空闲线程。MaxSpareThreads的取值范围是有限制的。Apache将按照如下限制自动修正你设置的值:worker要求其大于等于 MinSpareThreads加上ThreadsPerChild的和。
21 ThreadsPerChild 25 #每个子进程建立的线程数。默认值是25。子进程在启动时建立这些线程后就不再建立新的线程了。每个子进程所拥 有的所有线程的总数要足够大,以便可以处理可能的请求高峰。
22 MaxRequestsPerChild 0 设置每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结 束。如果MaxRequestsPerChild为”0″,子进程将永远不会结束。将MaxRequestsPerChild设置成非零值有两个好处:可以防止(偶然的)内存泄漏无限进行而耗尽内存; 给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。 如果设置为非零值,笔者建议设为10000-30000之间的一个值
23 </IfModule>
#公式: ThreadLimit >= ThreadsPerChild
MaxClients <= ServerLimit * ThreadsPerChild 必须是ThreadsPerChild的倍数 MaxSpareThreads >= MinSpareThreads+ThreadsPerChild
24-47行为其他模块,基本不用,这里不再累述
5.配置Apache服务器默认设置 httpd-default.conf
[root@backup extra]# egrep -v “#|^$” httpd-default.conf|nl
1 Timeout 300 设置服务器在断定请求失败前等待的秒数。默认值300
2 KeepAlive On 设置是否启用HTTP持久链接,On 代表打开,Off 代表关闭。如果用于同一页面包含大量静态文件的应用,设置为On,以提高性能;如果用于主要为动态页面的应用,设置为Off,以节约内存资源;如果服务器前跑有squid或者其它七层设备,设置为On。
3 MaxKeepAliveRequests 100 限制当启用KeepAlive时,每个连接允许的请求数量。如果将此值设为”0″,将不限制请求的数目。笔者建议将此值设为100-500之间的一个值,以确保最优的服务器性能。
4 KeepAliveTimeout 5 设置持久链接中服务器在两次请求之间等待的秒数。对于高负荷服务器来说,KeepAliveTimeout值较大会导致一些性能方面的问题:超时值越大,与空闲客户端保持连接的进程就越多。
5 UseCanonicalName Off 配置服务器如何确定它自己的域名,可选值为On | Off | DNS。DNS用于为大量基于IP的虚拟主机支持那些古董级的不提供”Host:”头的浏览器使用。笔者建议设置为Off。
6 AccessFileName .htaccess 设置分布式配置文件的名字,默认为.htaccess。如果为某个目录启用了分布式配置文件功能,那么在向客户端返回其中的文档时,服务器将在这个文档所在的各级目录中查找此配置文件,因此会带来性能问题,笔者建议关闭分布式配置文件功能。
7 ServerTokens Full 控制服务器回应给客户端的”Server:”应答头是否包含关于服务器操作系统类型和编译进的模块描述信息,同时还控制着 ServerSignature指令的显示内容。可选值为Full | OS | Minor | Minimal | Major | Prod。笔者建议设置为显示最少信息的Prod。
8 ServerSignature On 配置服务器生成页面的页脚,可选值为On | Off | EMail。采用On会简单的增加一行关于服务器版本和正在伺服的虚拟主机的ServerName,而EMail设置会额外创建一个指向 ServerAdmin的”mailto:”部分。建议使用默认值Off。
9 HostnameLookups Off 设置是否启用对客户端IP的DNS查找,可选值为On | Off | Double。DNS查询会造成明显的时间消耗,建议设置为Off。