Linux Apache安装及常规配置

转自: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服务,其启动、暂停相关命令如下。

  1. service httpd start     #启动  
  2. service httpd stop      #停止  
  3. service httpd restart       #重新启动  
  4. service httpd reload    #重新加载  
  5. service httpd status    #查看当前启动状态  

 

2.Apache服务自动加载

设置Apache服务下一次开机运行状态可通过以下命令或使用ntsysv命令在服务设置界面中配置,如图8-2所示。

  1. chkconfig httpd on                  #在运行级别2、3、4、5上设置为自动运行。  
  2. chkconfig httpd off                 #在运行级别2、3、4、5上设置为不自动运行。  
  3. chkconfig httpd --level 35 on       #在运行级别3、5上设置为自动运行。  
  4. chkconfig httpd --level 35 off      #在运行级别3、5上设置为不自动运行。  
 
图8-2  ntsysv命令配置服务

3.修改SELinux状态

在Apache服务器中并不是所有的操作都会受到SELinux的影响,下面列出的是所有与Apache服务器有关的SELinux配置。

  1. setsebool -P httpd_enable_cgi 1                     ①  
  2. chcon -t -R httpd_sys_script_exec_t /var/www/cgi        ②  
  3. setsebool -P httpd_enable_homedirs 1                    ③  
  4. setsebool -P httpd_tty_comm 1                       ④  
  5. setsebool -P httpd_unified 0                            ⑤  
  6. setsebool -P httpd_builtin_scripting 0                  ⑥  
  7. setsebool -P httpd_can_network_connect 1            ⑦  
  8. setsebool -P httpd_suexec_disable_trans 1           ⑧  
  9. setsebool -P httpd_disable_trans 1                      ⑨  
  10. 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的限制)。

  1. #/var/site/bbs.example.com为网页文件存放目录。  
  2. 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
(2)Main server configuration:主服务配置(如图8-4所示)。该部分实际也是对Apache运行网站的参数设置,如果使用了虚拟主机,也会成为虚拟主机配置中未定义参数的默认值。
 
图8-4  Main server configuration
(3)Virtual Hosts:虚拟主机配置(如图8-5所示),如果主服务配置中的参数位于某个虚拟主机的配置中,那么这些参数只对该虚拟主机生效。
 
图8-5  Virtual Hosts
由于在RHEL 5.x中Apache默认包括以下参数,因此所有位于/etc/httpd/conf.d目录中的*.conf将被自动附加到/etc/httpd/conf/httpd.conf文件中。有了这个功能,可以将需要配置的功能分成多个配置文件,存放在/etc/httpd/conf.d目录中(文件名可任意,但必须以.conf结尾),便于管理配置。
  1. Include conf.d/*.conf 

有很多Apache的模块在安装后会自动在/etc/httpd/conf.d中创建一个配置文件将模块载入,如果在安装了模块后,又不想使用该模块时,可以将/etc/httpd/conf.d对应的配置文件改一个名字即可(改后的名字不能以.conf结尾)。使用如下命令查看Apache已载入的模块,如图8-6所示。

 

  1. httpd -M 

 

 
图8-6  httpd -M

在Apache中可通过容器Direcotry、File、Location对配置(参数位于"Main server configuration"部分)或某个虚拟主机进行颗粒化的控制。最常用的容器是文件系统和网络空间。

(1)文件系统容器使用以下格式。在定义目录或文件时可以使用通配符("*"匹配任何字符串,"?"匹配任何单个的字符)或正规表达式。

  1. <Directory 目录> 
  2.      参数  
  3. </Directory> 
  4. <Files 文件> 
  5.      参数  
  6. </Files> 
  7. <DirectoryMatch 目录正规表达式> 
  8.      参数  
  9. </DirectoryMatch> 
  10. <FilesMatch 文件正规表达式> 
  11.      参数  
  12. </FilesMatch> 

(2)网络空间使用以下格式。在定义目录或文件时可以使用通配符("*"匹配任何字符串,"?"匹配任何单个的字符)或正规表达式。

  1. <Location 路径> 
  2.      参数  
  3. </Location> 
  4. <LocationMatch 路径正规表达式> 
  5.      参数  
  6. </LocationMatch> 

 


 

8.4.1  常规配置(3)

下面看几个使用容器的例子(例子中其他参数后述内容中讲解,这里只说明容器的使用方式)。

(1)对/var/site/bbs.example.com目录进行访问控制。

  1. <Directory /var/site/bbs.example.com> 
  2.      Order Allow,Deny  
  3.      Allow From All  
  4.      Deny From 192.168.0.0/24  
  5. </Directory> 

(2)对/var/site/bbs.example.com/account.html进行访问控制。

  1. <Files /var/site/bbs.example.com/account.html> 
  2.      Order Allow,Deny  
  3.      Allow From All  
  4.      Deny From 192.168.0.0/24  
  5. </Files> 

(3)对/var/site/bbs.example.com目录和该目录下的account.html实现不同的访问控制。

  1. <Directory /var/site/bbs.example.com> 
  2.      Order Allow,Deny  
  3.      Allow From All  
  4.      Deny From 192.168.0.0/24  
  5.      <Files account.html> 
  6.          Order Allow,Deny  
  7.          Allow From All  
  8.          Deny From 192.168.0.23  
  9.      </Files> 
  10. </Directory> 

(4)使用通配符对/var/site目录下所有以.example.com结尾的目录进行访问控制。

  1. <Directory /var/site/*.example.com> 
  2.      Order Allow,Deny  
  3.      Allow From All  
  4.      Deny From 192.168.0.0/24  
  5. </Directory> 

(5)使用正规表达式对Word、 Excel及mp3文件进行访问控制。

  1. <FilesMatch \.(?i:doc?x|xls?x|mp3)$> 
  2.      Order Allow,Deny  
  3.      Allow From All  
  4.      Deny From 192.168.0.0/24  
  5. </FilesMatch> 

(6)对网站根目录进行访问控制。

  1. <Location /> 
  2.      Order Allow,Deny  
  3.      Allow From All  
  4.      Deny From 192.168.0.0/24  
  5. </Location> 

(7)对网站中admin目录下的所有html文件进行访问控制。

  1. <Location /admin/*.html> 
  2.      Order Allow,Deny  
  3.      Allow From All  
  4.      Deny From 192.168.0.0/24  
  5. </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

  1. ServerName www.example.com:80 

(2)ServerAdmin。配置Apache中返回的错误信息中所包含的管理员邮箱。在下面的例子配置管理员的邮箱为[email protected]

  1. ServerAdmin [email protected] 

(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参数所指定文件,则根据顺序显示第一个指定文件)。

  1. 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参数语法如下。

  1. Listen [IP地址]:端口 

 

 
图8-17  侦听IP及端口

 

8.4.1  常规配置(5)

在配置Listen参数时至少需要端口,如不指定IP地址,默认为本机IP地址。可以指定多个Listen参数指定侦听本机的某几个IP地址的端口。在下面的例子中尽管本机有两个IP地址指定但Apache处理192.168.0.10的80端口收到的客户端请求,如图8-18所示。

  1. 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)。

  1. 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目录不限制)。

  1. <If Module mod_limitipconn.c> 
  2.     <Location /> 
  3.         MaxConnPerIP 5  
  4.         NoIPLimit css/*  
  5.     </Location> 
  6.     <Location /media> 
  7.         MaxConnPerIP 5  
  8.         OnlyIPLimit audio/mpeg video  
  9.     </Location> 
  10. </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)使用如下命令安装相关软件包。

  1. yum -y install httpd-devel.i* 

(2)下载(下载地址:http://www.ivn.cl/files/source/mod_bw-0.8.tgz)源码包后,使用如下命令解压。

 

  1. tar -xzvf mod_bw-0.8.tgz 

(3)编译mod_bw。

  1. cd mod_bw  
  2. apxs -cia mod_bw.c  

(4)mod_bw在配置时有以下参数。

BandWidthModule [On|Off]:当BandWidthModule On时,才开启bw_mod的带宽限制功能。

BandWidth [客户端来源] [bytes/s]:设置带宽限制的最大值,如在客户端来源使用all关键字时表示所有访问Apache的客户端(客户端来源表示方法如表8-3所示),当BandWidth值为0,则表示不限制带宽。

  1. BandWidth all 204800                    ①  
  2. 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

客户端FQDNclient.example.com

域名指定范围

.example.com

客户端FQDNDNS后缀为example.com

所有客户端

all

 

 

  1. BandWidth all 204800  
  2. MinBandWidth all -1 

BandWidth u:[User-Agent] [bytes/s]:通过客户端信息限制带宽。

  1. BandWidth "u:^Mozilla/5(.*)" 102400 ①  
  2. BandWidth "u:wget" 204800                   ②  

其中各行含义如下。

①:将使用FireFox的客户端最大带宽限制为100kbit/s。

②:将使用wget的客户端最大带宽限制为200kbit/s。

LargeFileLimit [文件类型] [文件大小] [bytes/s]:对于指定类型超过指定大小(单位为kbytes)的文件使用特定限制带宽。在下面的例子中将所有超过500KB的AVI文件带宽限制为300kbit/s。

  1. LargeFileLimit .avi 500 307200 

 

 

8.4.1  常规配置(7)

MaxConnection [客户端来源] [最大连接数] :设置最大连接数,当直接最大连接数时,Apache将返回503错误给客户端。如在客户端来源使用all关键字时表示所有访问Apache的客户端,MaxConnection参数在使用时必须有对应的BandWidth,否则该参数将被忽略。

  1. BandWidth all 204800                    ①  
  2. MaxConnection all 200                   ②  
  3. BandWidth 192.168.0.30 102400       ③  
  4. 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]:通过客户端信息限制最大连接数。

  1. MaxConnection "u:^Mozilla/5(.*)" 20 ①  
  2. MaxConnection "u:wget" 5                ②  

其中各行含义如下。

①:将使用FireFox的客户端最大连接数限制为20。

②:将使用wget的客户端最大连接数限制为5。

在使用BandWidth、MinBandWidth、LargeFileLimit、MaxConnection参数时可以根据客户端来源不同指定多个。

               

猜你喜欢

转载自xujava.iteye.com/blog/1922051