转自:http://book.51cto.com/art/201108/282390.htm
1.Apache安装
(1)使用RPM方式安装Apache使用如下命令。
rpm -ivh apr-1.2.7-11.i386.rpm
rpm -ivh postgresql-libs-8.1.11-1.el5_1.1.i386.rpm
rpm -ivh apr-util-1.2.7-7.el5.i386.rpm
rpm -ivh apr-util-ldap-1.3.9-3.el6.x86_64.rpm
rpm -ivh httpd-tools-2.2.15-5.el6.x86_64.rpm
rpm -ivh httpd-2.2.3-11.el5_1.3.i386.rpm
(2)使用YUM方式,可直接使用如下命令安装。
yum -y install httpd.i*
2.8.4 Apache服务配置
在Apache服务安装完成后,需要修改Apache服务配置文件以满足使用需求。
8.4.1 常规配置(1)
1.Apache服务启动、暂停
Apache属于System V服务,其启动、暂停相关命令如下。
- service httpd start #启动
- service httpd stop #停止
- service httpd restart #重新启动
- service httpd reload #重新加载
- service httpd status #查看当前启动状态
2.Apache服务自动加载
设置Apache服务下一次开机运行状态可通过以下命令或使用ntsysv命令在服务设置界面中配置,如图8-2所示。
- chkconfig httpd on #在运行级别2、3、4、5上设置为自动运行。
- chkconfig httpd off #在运行级别2、3、4、5上设置为不自动运行。
- chkconfig httpd --level 35 on #在运行级别3、5上设置为自动运行。
- chkconfig httpd --level 35 off #在运行级别3、5上设置为不自动运行。
图8-2 ntsysv命令配置服务 |
3.修改SELinux状态
在Apache服务器中并不是所有的操作都会受到SELinux的影响,下面列出的是所有与Apache服务器有关的SELinux配置。
- setsebool -P httpd_enable_cgi 1 ①
- chcon -t -R httpd_sys_script_exec_t /var/www/cgi ②
- setsebool -P httpd_enable_homedirs 1 ③
- setsebool -P httpd_tty_comm 1 ④
- setsebool -P httpd_unified 0 ⑤
- setsebool -P httpd_builtin_scripting 0 ⑥
- setsebool -P httpd_can_network_connect 1 ⑦
- setsebool -P httpd_suexec_disable_trans 1 ⑧
- setsebool -P httpd_disable_trans 1 ⑨
- semanage port -a -t http_port_t -p tcp 81 ⑩
其中各行含义如下。
①:允许Apache执行CGI程序。
②:修改CGI文件的安全上下文件。
③:允许Apache访问用户家目录。
④:允许Apache访问终端。
⑤:取消Apache访问文件的安全上下文检查。
⑥:取消SELinux对脚本程序的限制。
⑦:允许通过网络连接到httpd服务。
⑧:允许Apache使用su进行身份切换。
⑨:取消SELinux对Apache的限制。
⑩:允许Apache侦听81端口的HTTP请求(修改了Apache的侦听端口)。
除了上述SELinux配置外,推荐使用如下命令修改网页文件的安全上下文(并不是所有的网页文件都会因为安全上下文而受到SELinux的限制)。
- #/var/site/bbs.example.com为网页文件存放目录。
- chcon -R -t httpd_sys_content_t /var/site/bbs.example.com
4.配置文件结构
Apache服务配置文件有以下几个共性。
(1)以"#"开始的是注释行(在执行时将被忽略)。
(2)关键字对大小写不敏感。
(3)大多数参数都使用"参数 值"的方式配置。
(4)大多数参数在有多个值时,使用空格分隔。
主配置文件/etc/httpd/conf/httpd.conf由以下3部分组成(在本章的配置中如无特殊说明,所有参数的修改均指该配置文件)。
8.4.1 常规配置(2)
(1)Global Environment:全局配置(如图8-3所示)。该部分参数主要对Apache运行环境及状态进行设置。
(点击查看大图)图8-3 Global Environment |
图8-4 Main server configuration |
图8-5 Virtual Hosts |
- Include conf.d/*.conf
有很多Apache的模块在安装后会自动在/etc/httpd/conf.d中创建一个配置文件将模块载入,如果在安装了模块后,又不想使用该模块时,可以将/etc/httpd/conf.d对应的配置文件改一个名字即可(改后的名字不能以.conf结尾)。使用如下命令查看Apache已载入的模块,如图8-6所示。
- httpd -M
图8-6 httpd -M |
在Apache中可通过容器Direcotry、File、Location对配置(参数位于"Main server configuration"部分)或某个虚拟主机进行颗粒化的控制。最常用的容器是文件系统和网络空间。
(1)文件系统容器使用以下格式。在定义目录或文件时可以使用通配符("*"匹配任何字符串,"?"匹配任何单个的字符)或正规表达式。
- <Directory 目录>
- 参数
- </Directory>
- <Files 文件>
- 参数
- </Files>
- <DirectoryMatch 目录正规表达式>
- 参数
- </DirectoryMatch>
- <FilesMatch 文件正规表达式>
- 参数
- </FilesMatch>
(2)网络空间使用以下格式。在定义目录或文件时可以使用通配符("*"匹配任何字符串,"?"匹配任何单个的字符)或正规表达式。
- <Location 路径>
- 参数
- </Location>
- <LocationMatch 路径正规表达式>
- 参数
- </LocationMatch>
8.4.1 常规配置(3)
下面看几个使用容器的例子(例子中其他参数后述内容中讲解,这里只说明容器的使用方式)。
(1)对/var/site/bbs.example.com目录进行访问控制。
- <Directory /var/site/bbs.example.com>
- Order Allow,Deny
- Allow From All
- Deny From 192.168.0.0/24
- </Directory>
(2)对/var/site/bbs.example.com/account.html进行访问控制。
- <Files /var/site/bbs.example.com/account.html>
- Order Allow,Deny
- Allow From All
- Deny From 192.168.0.0/24
- </Files>
(3)对/var/site/bbs.example.com目录和该目录下的account.html实现不同的访问控制。
- <Directory /var/site/bbs.example.com>
- Order Allow,Deny
- Allow From All
- Deny From 192.168.0.0/24
- <Files account.html>
- Order Allow,Deny
- Allow From All
- Deny From 192.168.0.23
- </Files>
- </Directory>
(4)使用通配符对/var/site目录下所有以.example.com结尾的目录进行访问控制。
- <Directory /var/site/*.example.com>
- Order Allow,Deny
- Allow From All
- Deny From 192.168.0.0/24
- </Directory>
(5)使用正规表达式对Word、 Excel及mp3文件进行访问控制。
- <FilesMatch \.(?i:doc?x|xls?x|mp3)$>
- Order Allow,Deny
- Allow From All
- Deny From 192.168.0.0/24
- </FilesMatch>
(6)对网站根目录进行访问控制。
- <Location />
- Order Allow,Deny
- Allow From All
- Deny From 192.168.0.0/24
- </Location>
(7)对网站中admin目录下的所有html文件进行访问控制。
- <Location /admin/*.html>
- Order Allow,Deny
- Allow From All
- Deny From 192.168.0.0/24
- </Location>
5.语法检查
在每次修改完Apache配置文件后,可通过httpd -t检查配置文件是否正确。如果在配置文件中有错误httpd -t会显示出错误的内容及行数等信息,如图8-7所示。
图8-7 httpd -t |
6.初始配置
(1)ServerName。配置服务器用于识别自己的主机名和端口。当未指定ServerName时,Apache会尝试对IP地址进行反向解析来推断FQDN。推荐使用ServerName指定一个FQDN及端口。在下面的例子配置Apache的FQDN(可以是A记录,也可以是CNAME别名)为www.example.com。
- ServerName www.example.com:80
(2)ServerAdmin。配置Apache中返回的错误信息中所包含的管理员邮箱。在下面的例子配置管理员的邮箱为tonyzhang@example.com。
- ServerAdmin tonyzhang@example.com
(3)ServerSignature。配置Apache生成文档的页脚。该参数可指定为Off表示不生成任何页脚,On表示生成ServerTokens参数配置的值。E-Mail生成ServerTokens参数配置的值的同时,使用ServerAdmin的值在服务器IP地址上增加一个mailto:的链接,如图8-8所示。在RHEL 5.x默认为On。
图8-8 E-Mail |
Prod:返回Apache的产品名称,如图8-9所示。
Major:返回Apache主版本号,如图8-10所示。
图8-9 Prod |
图8-10 Major |
8.4.1 常规配置(4)
Minor:返回Apache主版本号及次版本号,如图8-11所示。
Min:返回Apache主版本号、次版本号、编译版本号,如图8-12所示。
OS:返回Apache主版本号、次版本号、编译版本号、操作系统,如图8-13所示。
Full:返回最详细的信息,如图8-14所示。
图8-11 Minor |
图8-12 Min |
图8-13 OS |
图8-14 Full |
7.默认网站配置
如果希望以最简单的方式配置一个网站,只需要将网站内容放入参数DirectoryRoot所指定的目录中(在RHEL 5.x中该参数默认值为/var/www/html)并保证网站所有内容User参数所指定的用户(在RHEL 5.x中该参数默认值为apache)至少是有读和执行的权限即可。
8.默认首页配置
当客户端访问Web服务器时,如果没有指定所访问页面时,Apache将根据DirectoryIndex参数的设置在目录查找相应页面显示。如下面的例子中Apache将尝试查找客户端所指定显示的目录中是否有名为index.html、index.html.var、default.html其中之一的文件,如果有则显示其内容,如果没有默认情况显示目录中所有内容(如果目录中存在多个DirectoryIndex参数所指定文件,则根据顺序显示第一个指定文件)。
- DirectoryIndex index.html index.html.var default.html
9.目录浏览配置
如果客户端访问的目录中没有DirectoryIndex参数定义的页面时,默认情况显示目录中所有内容,如图8-15所示。对于大多数企业网站来说并不需要这样的功能,可以将Options参数(默认在/etc/httpd/conf/httpd.conf中320行左右,如图8-16所示)中Indexes值删除禁止使用这样的目录浏览功能。
图8-15 目录浏览 |
图8-16 Option |
10.侦听IP及端口配置
Apache在默认情况下,会侦听本机所有IP地址的80端口,如图8-17所示。可通过修改Listen参数改变侦听的IP或端口。Listen参数语法如下。
- Listen [IP地址]:端口
图8-17 侦听IP及端口 |
8.4.1 常规配置(5)
在配置Listen参数时至少需要端口,如不指定IP地址,默认为本机IP地址。可以指定多个Listen参数指定侦听本机的某几个IP地址的端口。在下面的例子中尽管本机有两个IP地址指定但Apache处理192.168.0.10的80端口收到的客户端请求,如图8-18所示。
- Listen 192.168.0.10:80
(点击查看大图)图8-18 Listen |
11.超时配置
Apache超时设置一般是通过Timeout(单位:秒,在RHEL 5.x默认为120)参数设置,但影响Apache超时的参数还有以下几个。
(1)KeepAlive:是否支持持久连接(在RHEL 5.x默认为off)。KeepAlive 参数决定当处理完客户发起的HTTP请求后是否立即关闭TCP连接,如果KeepAlive 设置为On,那么用户完成一次访问后,不会立即断开连接,当后继有请求时,会继续在这一次TCP连接中完成,而不用重复建立新的TCP连接和关闭TCP连接,这样可以提高用户访问速度。如果使用了代理服务器推荐配置为on。
(2)MaxKeepAliveRequests:在持久连接期间,所允许的最大请求数量。指定为0时表示不作限制(在RHEL 5.x默认为100)。
(3)KeepAliveTimeout:在同一个客户客户端连接中,下一个请求的等待时间(单位为秒,在RHEL 5.x默认为15)。
KeepAlive参数的设置需要根据实际情况判断,比如Web服务器内存是否充足、网页内容是否由动态脚本生成、网页是否引用大量JavaScript、CSS或类型文件、是否使用代理服务器等等。下面是几种常见情况下KeepAlive参数的配置方法。
(1)当客户端浏览的网页,包含多个JavaScript、CSS或其他类似文件,并且这些文件位于同一台Web服务器时,一般将KeepAlive设置为"on"。
(2)当客户端浏览的网页,只包含少量JavaScript、CSS或其他类似文件,KeepAlive的设置作用不大。
(3)当客户端浏览的是动态网页,其内容大多通过动态脚本生成时,一般将KeepAlive设置为"off"。
12.连接配置
Apache提供以下几个参数用于对连接数量等进行配置。
(1)StartServers:指定启动Apache时启动的httpd进程个数(在RHEL 5.x默认为8)。
(2)ServerLimit:指定Apache允许配置同时处理的客户端请求的最大值。
(3)MaxClients:指定Apache可以同时处理的客户端请求(在RHEL 5.x默认为256),这是对Apache性能影响最大的参数。如果请求总数已达到这个值,那么下面的请求就要排队,直到某个已处理请求完毕。可以根据硬件配置和负载情况来动态调整这个值。256也是Apache默认情况最大的值,如果希望配置为大于256时,需要首先将ServerLimit参数的值配置为大于MaxClients的值。
(4)MinSpareThreads:Apache保持的最小空闲线程数(在RHEL 5.x默认为5)。
(5)MaxSpareThreads:Apache保持的最大空闲线程数(在RHEL 5.x默认为20)。如果空闲进程数大于这个值,Apache会自动删除某些多余进程。这个值一般不要设得过大,但如果设得比MinSpareServers小,Apache会自动把它调整为MinSpareServers+1。
(6)MaxRequestsPerChild:每个子进程被请求服务多少次后被删除掉。0表示不限制(在RHEL 5.x默认为4000)。
13.字符集配置
如果确定所有的页面都为GB2312时,可将AddDefaultCharset 参数设置为GB2312。但是如果有一些页面并不是GB2312时,这样设置会导致在页面中字符集设置(在页面中使用<META http-equiv="Content-Type" content="text/html; charset=gb2312" />)无效,这是因为Apache已经先将GB2312指定为页面默认的字符集,因此这种情况下最好的解决方法是将AddDefaultCharset 参数设置为Off,并在页面(对于动态页面也可以在对应的脚本引擎中设置,如PHP可以在/etc/php.ini通过default_charset参数设置)中设置字符集。
14.单IP并发配置
当在网站中提供了HTTP方式的下载时,目前大多数客户端在下载时都采用多线程下载工具(如迅雷、超级旋风、网际快车等),这样会给Web服务器带来巨大的压力。解决这类问题也有很多种方式,其中一种就是在Apache中对单个IP的并发数及下载速度进行限制。
单个IP并发数限制可通过mod_limitipconn模块实现。mod_limitipconn是一个非官方的模块(mod_limitipconn官方网站:http://dominia.org/djao/limitipconn.html),使用该模块后当同一个IP的连接到达限制的时候,Apache对客户端的Get请求发送"HTTP/1.1 503 Service Temporarily Unavailable"(该模块并不能阻止DDOS或类似的攻击)。使用如下命令安装mod_limitipconn(RPM包下载地址http://dominia.org/djao/limit/mod_limitipconn-0.23-1.el5.i386.rpm)。
- rpm -ivh mod_limitipconn-0.23-1.el5.i386.rpm
在安装完成后,会在/etc/httpd/conf.d目录中建立一个名为limitipconn.conf的配置文件。在该文件中已将limitipconn.so模块装载,如图8-19所示。
图8-19 limitipconn.conf |
8.4.1 常规配置(6)
mod_limitipconn配置时使用Location指定要限制并发的目录,MaxConnPerIP指定单个IP最大并发的数量,NoIPLimit指定在Location所指定目录中不作限制的目录,OnlyIPLimit指定只限制特定类型的文件(根据MIME内容类型)。在下面的例子中将限制网站的根目录(但不包括css目录)及/media目录(只限制所有视频文件)的单个IP最大并发数量为5个(但根目录下mp3目录不限制)。
- <If Module mod_limitipconn.c>
- <Location />
- MaxConnPerIP 5
- NoIPLimit css/*
- </Location>
- <Location /media>
- MaxConnPerIP 5
- OnlyIPLimit audio/mpeg video
- </Location>
- </IfModule>
提示:MIME(Multipurpose Internet Mail Extensions,多用途互联网邮件扩展)是一个互联网标准,它扩展了电子邮件标准,使其能够支持非ASCII字符、二进制格式附件等多种格式的邮件消息。这个标准被定义在RFC 2045、RFC 2046、RFC 2047、RFC 2048、RFC 2049等中。由RFC 822转变而来的RFC 2822规定电子邮件标准不允许在邮件消息中使用7位ASCII字符集以外的字符。正因如此一些非英语字符消息和二进制文件,图像,声音等非文字消息都不能在电子邮件中传输。MIME规定了用于表示各种各样的数据类型的符号化方法。此外在万维网中使用的HTTP协议中也使用了MIME的框架。
15.下载速度配置
根据来源IP进行带宽限制可通过bw_mod模块实现。bw_mod是一个非官方的模块,使用该模块后传输速度到达限制的时候,Apache断开与客户端的连接。bw_mod配置方法如下。
(1)使用如下命令安装相关软件包。
- yum -y install httpd-devel.i*
(2)下载(下载地址:http://www.ivn.cl/files/source/mod_bw-0.8.tgz)源码包后,使用如下命令解压。
- tar -xzvf mod_bw-0.8.tgz
(3)编译mod_bw。
- cd mod_bw
- apxs -cia mod_bw.c
(4)mod_bw在配置时有以下参数。
BandWidthModule [On|Off]:当BandWidthModule On时,才开启bw_mod的带宽限制功能。
BandWidth [客户端来源] [bytes/s]:设置带宽限制的最大值,如在客户端来源使用all关键字时表示所有访问Apache的客户端(客户端来源表示方法如表8-3所示),当BandWidth值为0,则表示不限制带宽。
- BandWidth all 204800 ①
- BandWidth 192.168.0.30 102400 ②
其中各行含义如下。
①:将所有客户端最大带宽限制为200kbit/s。
②:将IP地址为192.168.0.30的客户端最大带宽限制为100kbit/s。
MinBandWidth [客户端来源] [bytes/s]:设置带宽限制的最大值,如果在客户端来源使用all关键字时表示所有访问Apache的客户端,客户端来源表示方法如表8-3所示。如果只有一个客户端连接到Apache时,该参数没有作用,Apache会根据BandWidth的值限制其带宽,如果有多个客户端连接到Apache时,Apache会根据MinBandWidth的值限制每个客户端带宽,根据BandWidth的值限制总带宽。当MinBandWidth值为0,则表示每个客户端带宽最大为256 bytes/s,当MinBandWidth值为-1时,每个客户端带宽最大为BandWidth的值。在下面的例子中将每个客户端最大带宽限制为200kbit/s。
表8-3 BandWidth来源
客户端指定方法 | 示 例 | 满足示例的客户端 |
IP指定单一主机 | 192.168.0.30 | 客户端IP地址为192.168.0.30 |
指定网段 | 192.168.0.0/255.255.255.0 | 客户端所在网段为192.168.0.0/24 |
指定网段 | 192.168.0.0/24 | |
域名单一主机 | client.example.com | 客户端FQDN为client.example.com |
域名指定范围 | .example.com | 客户端FQDN的DNS后缀为example.com |
所有客户端 | all |
|
- BandWidth all 204800
- MinBandWidth all -1
BandWidth u:[User-Agent] [bytes/s]:通过客户端信息限制带宽。
- BandWidth "u:^Mozilla/5(.*)" 102400 ①
- BandWidth "u:wget" 204800 ②
其中各行含义如下。
①:将使用FireFox的客户端最大带宽限制为100kbit/s。
②:将使用wget的客户端最大带宽限制为200kbit/s。
LargeFileLimit [文件类型] [文件大小] [bytes/s]:对于指定类型超过指定大小(单位为kbytes)的文件使用特定限制带宽。在下面的例子中将所有超过500KB的AVI文件带宽限制为300kbit/s。
- LargeFileLimit .avi 500 307200
8.4.1 常规配置(7)
MaxConnection [客户端来源] [最大连接数] :设置最大连接数,当直接最大连接数时,Apache将返回503错误给客户端。如在客户端来源使用all关键字时表示所有访问Apache的客户端,MaxConnection参数在使用时必须有对应的BandWidth,否则该参数将被忽略。
- BandWidth all 204800 ①
- MaxConnection all 200 ②
- BandWidth 192.168.0.30 102400 ③
- MaxConnection 192.168.0.30 5 ④
其中各行含义如下。
①:将所有客户端最大带宽限制为200kbit/s。
②:将所有客户端最大连接数设置为200。
③:将IP地址为192.168.0.30的客户端最大带宽限制为100kbit/s。
④:将IP地址为192.168.0.30的客户端最大连接数设置为5。
MaxConnection u:[User-Agent] [Max]:通过客户端信息限制最大连接数。
- MaxConnection "u:^Mozilla/5(.*)" 20 ①
- MaxConnection "u:wget" 5 ②
其中各行含义如下。
①:将使用FireFox的客户端最大连接数限制为20。
②:将使用wget的客户端最大连接数限制为5。
在使用BandWidth、MinBandWidth、LargeFileLimit、MaxConnection参数时可以根据客户端来源不同指定多个。