编译安装Apache服务器&httpd服务的基本配置
LAMP架构是目前最为成熟的一种企业网站应用模式,指的是协同工作的一整套系统和相关软件,能够提供动态Web站点服务及其应用开民环境。LAMP这个词是一个缩写,具体包括:Linux操作系统,作为LAMP架构运行的基础;Apache网站服务器作为LAMP架构的前端;MySQL数据库服务器作为LAMP架构的后端;PHP(或Perl、Python)编写语言,作为三种开发动态网页的编程语言。LAMP平台具有成本低廉、可定制、易于开发、方便使用、安全和稳定等优势。
从本次开始我将会和大家共同探讨Red Hat5平台下的LAMP网站服务搭建,其中包括编译安装Apache服务器、httpd服务的基本配置、使用awstats分析Web日志、httpd服务的访问控制、MySQL数据库的安装和管理、构建PHP环境、常见论坛搭建等。因为涉及的内容较多,所以大家可能也看到标题上多了序号和子标题。
第一部分:安装httpd服务器
在配置Apache Web服务器之前,需要正确安装好httpd服务器软件。在RHEL5系统中, 可以选择两种方式行安装,第一种方式是通过RHEL5系统光盘自带的RPM包安装,第二种方式就是下载最新版本的httpd源代码,释放后进行编译安装。前者简单、快速,但在功能上存在局限性,实际的生产环境中,编译安装的方式应用要更加广泛。本次我们主要介绍源码编译安装。
1. 获取软件包
获取软件包可发通过Apache服务软件的下载页面:http://httpd.apache.org/download.cgi下载到各个版本的httpd软件包,或者使用wget工具下载httpd-2.2.9.tar.gz源码包文件
wget http://archive.apache.org/dist/httpd/httpd-2.2.9.tar.gz
2. 解压并释放源码包
在配置前可以先执行“./configure –help”命令查看各种配置项的详细信息,以便实现更灵活,更丰富的功能定制配置。
4.编译服务器程序
5.安装已编译完成的程序
第二部分:httpd.conf配置文件解析
Httpd.conf文件是httpd服务的主配置文件,其中包含的配置项直接决定着Web服务器的各项运行参数及服务器性能。要做姨LAMP,我们必须了解httpd.conf中的常用配置项的功能及作用。
1. httpd.conf配置文件的结构
httpd.conf文件由注释行和设置行两部分组成,注释行以“#”开始,包含了对配置行说明和解释的内容,并不是有效的配置项;设置行不以“#”开始,是配置文件中真正有效的设置内容。配置文件中大量的注释行虽然对理解配置项的含义有所帮助,但是过多的注释行也会对配置文件的阅读造成一定的干扰,我们可以使用如下的命令去除掉注释行。
[root@www ~]# cd /usr/local/apache2/conf/
[root@www conf]# cp httpd.conf httpd.conf.bak
[root@www conf]# grep -v '#' httpd.conf.bak | grep -v '^$' > httpd.conf
2. httpd.conf中的全局配置、
httpd.conf配置文件中包括有相当数量的全局配置项,这些配置项不包括在任何区域中,决定了Apache服务器的全局参数。以下是httpd.conf文件中常用到的全局配置项内容及注解。
ServerRoot "/usr/local/apache2" //用于设置httpd服务器的根目录
Listen 80 //用于设置监听的端口号
User daemon //用于设置运行htttpd进程时的用户身份
Group daemon //用于设置运行htttpd进程时的组身份
ServerAdmin web@zpp.com //用于设置管理员的E-mail地址
ServerName www.zpp.com //用于设置FQDN
DocumentRoot "/usr/local/apache2/htdocs" //用于设置网页文档根目录
DirectoryIndex index.html index.php //用于设置网站的默认首页
ErrorLog "logs/error_log" //用于设置错误日志文件的路径和文件名
LogLevel warn //用于设置记录的级别,默认为Warn(警告)
CustomLog logs/access_log common //用于设置访问日志文件的路径和格式类型
PidFile logs/httpd.pid //用于设置保存httpd服务器程序进和号(PID)文件
Timeout 300 //用于设置服务器与浏览器之间网络连接的超时时间
KeepAlive On //用于设置是否使用保持连接功能
MaxKeepAliveRequests 100 //用于设置客户端每次连接允许请求响应的最大文件数
KeepAliveTimeout 15 //用于设置保持连接的超时秒数
Include conf/extra/httpd-vhosts.conf //用于包含另一个配置文件的内容
… …
3. httpd.conf中的区域设置
除了全局设置项外,htttpd.conf文件中的在多数配置都是包括在区域中的,区域设置使用一对组合标记,限定了配置项的作用范围,例如,配置文件中常用的目录区域的形式如下:
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
</Directory>
说明:在以上的区域定义中,使用<Directory />定义区域的开始,使用</Directory>定义该区域的结束,其间的设置内容只作用于区域内部,而不会在全局或其它区域中生效。目录区域设置主要用于为特定的目录,设置访问控制权限。除了目录区域外,经常会设置如“<VirtualHost>… …</VirtualHost>”这样的虚拟主机等的区域。
第三部分:web站点的故障排错与性能测试
1.检查httpd.ocnf文件的语法设置
在对httpd.conf文件进行修改后,建议使用带“-t”选项的apachetl命令对配置内容进行语法检查(也可发使用“httpd –t”命令)。如果没有语法错误,将会显示“syntax OK”的信息。否则,需要根据错误信息中的提示,将语法错误修正后再重新检查。用法如下图:
[root@www conf]# /usr/local/apache2/bin/apachectl –t
Syntax OK
[root@www conf]# /usr/local/apache2/bin/httpd –t
Syntax OK
[root@www conf]#
2.启动、终止及重启httpd服务
使用带“start”选项的apachectl命令可发启动htttpd服务。
例如:使用apachectl脚本程序启动httpd服务,并观察httpd服务的监听状态。
[root@www ~]# /usr/local/apache2/bin/apachectl start
[root@www ~]# netstat -anpt | grep :80
tcp 0 0 :::80 :::* LISTEN 21669/httpd
[root@www ~]#
说明:将上述apachectl脚本命令的“start”选项替换为“stop”、“restart”时,可分别用于终止、重启httpd服务。若希望在服务器开机后自动运行httpd服务,可以将对应的启动命令写入到“/etc/rc.d/local”文件中。
3.排除httpd服务的个别启动状态
1>.无法确定Web服务器主机名的故障
当httpd服务识别的主机名与服务器实际的主机名不一致时,可能导致启动httpd服务的时侯反应非常缓慢,且出现如下命令提示信息。
[root@www ~]# /usr/local/apache2/bin/apachectl –t
httpd: apr_sockaddr_info_get() failed for www.zpp.com
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
Syntax OK
[root@www ~]#
参考下列步骤可发解决这个问题。
编辑httpd.conf主配置文件,添加配置行“ServerName www.zpp.com”,指定完整的主机名。若缺少“ServerName”配置行,httpd服务器可能会将“127.0.0.1”作为主机名。
编辑“/etc/sysconfig/network”文件,修改主机名,例如“HOSTNAME=www.zpp.com”。
编辑“/etc/hosts”文件,添加服务器的主机名、IP地址记录,如“192.168.1.1 www.zpp.com ”。
2>.TCP80端口已被占用的故障
当启动httpd服务的时侯出现“… …could not bind to adderss [::]:80”的提示信息时,则表示使用的端口(默认为80)已经被其它进程占用。这时只需要执行“netstat –anpt | grep :80”命令,找出占用80端口的进程并关闭掉即可。很多时侯是系统原有RPM方式安装的httpd服务进程造成的,只要停用原有的httpd服务,并将自启动状态设置为关闭即可。
如下图所示是此类故障的效果及解决办法。
[root@www ~]# /usr/local/apache2/bin/apachectl start
(98)Address already in use: make_sock: could not bind to address [::]:80
(98) Address already in use: make_sock:could not bind to address 0.0.0.0:80
no listening sockets available,shutting down
Unable to open logs
[root@www ~]# netstat -anpt | grep :80
tcp 0 0 :::80 :::* LISTEN 21669/httpd
[root@www ~]# killall -9 httpd
[root@www ~]# chkconfig --level 35 httpd off
[root@www ~]# /usr/local/apache2/bin/apachectl start
4.测试httpd服务器的性能
Httpd服务自带了一个压力测试工具AB(Apache Benchmark,Apache基准测试工具),用于检测Web站点的性能表现,如并发平均响应时间、速度以及并发连接处理能力等。AB命令工具位于安装目录中的“bin/”文件夹下,使用该命令的简单格式如下:
Ab [-q] –c 并发请求数 –n 总的请求数 [http://] 域名 [:端口]/路径
说明:使用-q选项时,将不显示测试进度信息,当测试的目标是Web站点的根路径时,注意最后的“/”符号不能省略。指定的并发请求数不能大于总的请求数。下面我们来举例说明ab命令的使用方法。
1>.使用ulimit命令修改最大文件数限制
在RHEL5系统中,默认允许打开的最大文件数为1024.由于使用AB测试工具时可能需要同时打开更多的文件,因此需要使用ulimit命令突破这个限制。Ulimt是一个Bash内部的命令,可以用于对Shell进程使用的系统资源进行限制。
注意:如果不更改最大文件数限制,在使用AB工具时可能会出现“socket:Too many open files(24)”的错误提示信息,导致测试无法进行。
2>.使用AB命令进行压力测试
执行AB测试命令后,通过命令输出的结果判断Web服务器的响应情况及性能表现
[root@www ~]# /usr/local/apache2/bin/ab -q -c 2000 -n 4000 http://www.zpp.com/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking www.zpp.com (be patient).....done
Server Software: Apache/2.2.9
Server Hostname: www.zpp.com
Server Port: 80
Document Path: /
Document Length: 44 bytes
Concurrency Level: 2000 //用于并发连接测试的请求数
Time taken for tests: 3.309 seconds //测试过程消耗的时间
Complete requests: 4000 //测试过程中总共完成的请求数
Failed requests: 0 //失败的请求数量
Write errors: 0
Total transferred: 1190484 bytes //测试过程中的网络传输量
HTML transferred: 179388 bytes //测试过程中的HTML内容传输量
Requests per second: 1208.97 [#/sec] (mean) //服务器平均每秒响应的请求数
Time per request: 1654.301 [ms] (mean) //服务器平均每请求的响应时间
Time per request: 0.827 [ms] (mean, across all concurrent requests)
Transfer rate: 351.38 [Kbytes/sec] received
Connection Times (ms) //连接时间统计信息
min mean[+/-sd] median max
Connect: 0 212 690.9 39 3131
Processing: 1 158 33.3 163 292
Waiting: 0 88 38.8 101 205
Total: 84 370 685.6 204 3200
Percentage of the requests served within a certain time (ms)
50% 204
66% 211
75% 230
80% 244
90% 292
95% 3152
98% 3180
99% 3188
100% 3200 (longest request)
第四部分:Web站点的典型应用
一. 构建虚拟Web主机
虚拟Web主机指的是在同一台服务器中运行多个Web站点的应用,其中的每一个站点并不独立占用一台真正的计算机。例如,当用户访问两个不同的网站www.zou.com、www.pan.com时,所看到的网页内容也不相同,而如果这两个网站实际上是在同一台服务器中运行的,那么就可以称为是“虚拟的”Web主机,一般简称“虚拟主机”。
1. 构建基于域名的虚拟主机
本实验以实现两个虚拟Web主机www.zou.com和www.pan.com为例,其对应的服务器IP地址为192.168.1.1。构建过程参考如下:
1>.确定服务器的主机名、IP地址等参数。
向域名注册机构申请Web站点的域名,使得所有的用户在访问域名www.zou.com、www.accp.com时,指向的IP地址对应为192.168.1.1.
2>.分别准备两个虚拟站点的网页文件
3>.修改httpd.conf文件,添加虚拟主机配置
编辑httpd.conf文件,使用“Name VirtualHost”配置项指定运行虚拟主机的服务器IP地址,并为每一个虚拟站点增加一段“<VirtualHost虚拟主机IP地址>… …</VirtualHost>”区域设置,其中至少包括虚拟主机的域名、网页文档根目录的配置行,其他的设置内容可发参考httpd.conf文件中的全局配置。如果虚拟主机数较多,建议为每一个虚拟主机使用独立的访问日志和错误日志文件。
首先要确保客户机能够正确解析这两个虚拟主机的域名,并能够连接到该服务器,如果在实验中没有搭建可用的DNS服务器,也可通过修该客户机的hosts文件来完成域名解析——如果是Linux客户机,则修改“/etc/hosts”文件;如果是windows客户机,则修改“C:\WINDOWS\system32\drivers\hosts”文件,添加相应域名到IP地址的映射记录即可。
在客户端浏览器中分别访问两个虚拟主机站点www.zou.com、www.pan.com,将会看到不同的网页内容
浏览网站www.zou.com所看到的效果:
构建基于IP地址的虚拟主机服务器时,与构建基于域名虚拟主机的过程基本类似。只不过中httpd.conf文件中的配置稍微有些区别:不再需要指明“NameVirtualHost”配置行,每个虚拟主机的“<VirtualHost虚拟主机IP地址>… …</VirtualHost>”区域设置中,也要改为各自域名对应的IP地址。
下面以域名www.zou.com对应的IP地址为1.1.1.1,www.pan.com对应的IP地址为2.2.2.2为例,在httpd.conf文件中的设置形式如下图:
3. 构建基于端口的虚拟主机
构建基于端口的虚拟主机服务器时,httpd服务监听的IP地址、端口号需要与各虚拟主机使用的IP地址、端口号相对应,一般也无需指定“NameVirtualHost”配置行。
下面以访问80端口时对应站点www.zou.com,访问8080端口时对应站点www.pan.com为例,在httpd.conf文件中的设置形式如下:
Httpd服务自带的个为主页功能,可以非常方便地为Linux系统用户提供Web站点服务。服务器吕启用该功能参后,每个系统用户只需在宿主目录中的相应位置(默认为public_html子目录)建立网页文件,就可以在浏览器中访问自己的个人主页了。
下面我们以为Linux系统用户zpp建立个人主页为例,讲解在httpd服务器中实现个人主页服务的过程
1. 修改httpd文件,启用个人主页功能
添加“UserDir public_html”配置行,并添加“<Directory“/home/*/public_html”>… …</Directory>”目录区域设置,以便允许客户机访问系统用户的个人网页目录。
切换为目标用户zpp,在宿主目录中建立public_html文件夹,并添加测试网页文件。