CentOS 6.6下安装Apache 2.2.31
安装环境:
[root@apache ~]# cat /etc/RedHat-release
CentOS release 6.6 (Final)
[root@apache ~]# uname -r
2.6.32-504.el6.x86_64
Apache简介
Apache是世界上最流行的Web服务器软件之一,当然,提供WWW服务的还有微软的IIS,它是由微软开发的,只能用在微软的操作系统上,而Apache是一个自由软件。说到Apache,还要联想到LAMP,这个近年来也是应用得非常广泛,LAMP就是:linux+Apache+mysql+php。Apache的特点是简单、速度快、性能稳定。
Apache的特点
功能强大,配置简单,速度快,应用广泛,性能稳定可靠,并可做代理服务器或负载均衡来使用。
Apache的应用场合
- 使用Apache运行静态HTML网页,图片(处理静态小文件能力不及Nginx)
- 使用Apache结合PHP引擎运行PHP,Perl等程序,LAMP被称之为经典组合
- 使用Apache结合Tomcat/Resin运行JSP,JAVA等程序,成为中小企业的首选
- 使用Apache作代理,负载均衡,rewrite规则过滤等等
安装Apache
1:卸载系统默认安装的Apache软件包
一般来说,操作系统自带或者apache rpm包方法安装的apache版本都比较低,且更新不及时,因此我们需要卸载掉安装操作系统时默认被安装上的apache软件
通过rpm -qa httpd*命令,查询当前系统中已安装的apache软件包,具体查询操作过程如下:
rpm -qa httpd*
rpm -e --nodeps httpd-2.2.3-43.el5.centos.3
通过rpm -e --nodeps后面分别接查询到的apache软件包完整名称,即可卸载当前系统中通过rpm安装方式安装的apache软件包
--nodeps:Don’t do a dependency check,意思是不做软件间的依赖检查
对于具备一定经验的朋友,也可以直接执行下面的shell脚本命令来批量删除系统自带的apache软件包
for name in `rpm -qa httpd*`;do rpm -e --nodeps $name;done
2:安装zlib-devel包
yum install zlib-devel -y
3:开始安装Apache
Apache-2.2.31版本可以到安科网资源站下载:
------------------------------------------分割线------------------------------------------
具体下载目录在 /2017年资料/2月/19/CentOS 6.6下安装Apache 2.2.31/
------------------------------------------分割线------------------------------------------
tar zxvf httpd-2.2.32.tar.gz
cd httpd-2.2.31
4:创建安装目录
[root@apache httpd-2.2.31]# mkdir /application
5:编译
./configure \
--prefix=/application/apache2.2.31 \
--enable-deflate \
--enable-expires \
--enable-headers \
--enable-modules=most \
--enable-so \
--with-mpm=worker \
--enable-rewrite
#编译参数说明:
#1. --prefix=/application/apache2.2.31 表示指定安装路径为:/application/apache2.2.31。如果不指定安装路径,则默认路径为:/usr/local/apache2
#2. --enable-deflate 提供对内容的压缩传输编码支持,一般html,js,css等内容的站点,使用此参数功能会大大提高传输速度,提升访问者访问体验。在生产环境中,这是apache调优的一个重要选项之一
#3. --enable-expires 激活允许通过配置文件控制http的“expires”和“cahe-control:”头内容,即对网站图片,JS,CSS等内容,提供在客户端浏览器缓存的设置。这是apache调优的一个重要选项之一
#4. --enable-headers 提供允许对HTTP请求头的控制
#5. --with-mpm=worker 选择apache mpm的模式为worker模式,因为worker模式原理是更多的使用线程处理请求,所以可以处理更多的并发请求,而系统资源的开销小于基于进程的mpm prefork。如果不指定此参数,默认的模式是prefork进程模式。有关apache模式的知识,后文会有详细阐述。这是apache调优的一个重要选项之一
#6. --enable-rewrite 提供基于URL规则的重写功能。即根据已知URL地址,转换其它想要的URL地址。如前文讲解的伪静态功能就是这个模块实现的。这是APACHE在生产环境中必用的一个重要功能。
#7. --enable-so 激活APACHE服务的DSO(全称dynamic shared object,动态共享对象)支持,即在以后可以以DSO的方式编译安装共享模块。这个模块本身不能以DSO方式编译。有关DSO的知识,后文讲解。
上面如果没有安装zlib-devel包,这步编译时会报如下错误:
checking for zlib location... not found
checking whether to enable mod_deflate... configure: error: mod_deflate has been requested but can not be built due to prerequisite failures
上面编译无误后执行下面的命令开始安装:
make
make install
6:创建软链接
[root@apache application]# ln -s apache2.2.31 apache
[root@apache application]# ll
total 4
lrwxrwxrwx 1 root root 12 Feb 15 10:30 apache -> apache2.2.31
drwxr-xr-x 15 root root 4096 Feb 15 10:30 apache2.2.31
查看APACHE编译的模块:
[root@apache application]# /application/apache/bin/apachectl -l
Compiled in modules:
core.c
mod_authn_file.c
mod_authn_dbm.c
mod_authn_anon.c
mod_authn_dbd.c
mod_authn_default.c
mod_authz_host.c
mod_authz_groupfile.c
mod_authz_user.c
mod_authz_dbm.c
mod_authz_owner.c
....................................................
7:启动APACHE并测试
[root@apache application]# /application/apache/bin/apachectl start
httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.17.16 for ServerName
#第一次启动时,此提示可暂时忽略
查看80端口:
[root@apache application]# lsof -i :80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 58925 root 4u IPv6 50990 0t0 TCP *:http (LISTEN)
httpd 58927 daemon 4u IPv6 50990 0t0 TCP *:http (LISTEN)
httpd 58928 daemon 4u IPv6 50990 0t0 TCP *:http (LISTEN)
httpd 58929 daemon 4u IPv6 50990 0t0 TCP *:http (LISTEN)
查看httpd进程:
[root@apache application]# ps -ef|grep httpd
root 58925 1 0 10:32 ? 00:00:00 /application/apache2.2.31/bin/httpd -k start
daemon 58926 58925 0 10:32 ? 00:00:00 /application/apache2.2.31/bin/httpd -k start
daemon 58927 58925 0 10:32 ? 00:00:00 /application/apache2.2.31/bin/httpd -k start
daemon 58928 58925 0 10:32 ? 00:00:00 /application/apache2.2.31/bin/httpd -k start
daemon 58929 58925 0 10:32 ? 00:00:00 /application/apache2.2.31/bin/httpd -k start
APACHE启动成功后,在浏览器输入该服务器IP地址,可看到It works!字样:
[root@apache application]# ifconfig eth0|awk -F '[ :]+' 'NR==2{print $4}'
192.168.17.16
如果出不来it works的内容页面,请从下面原因中依次排查:
1:iptables防火墙和selinux是否关闭
[root@apache application]# /etc/init.d/iptables stop
#这是关闭防火墙的命令,如果是生产环境请允许80端口的访问,而不是关闭防火墙
#允许命令如下:
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
关闭selinux:
临时关闭:setenforce 0
永久关闭(修改配置文件):cat /etc/selinux/config|grep SELINUX=disabled
2:通过下面命令确认httpd端口80是否存在
[root@apache application]# netstat -lnput|grep 80
tcp 0 0 :::80 :::* LISTEN 58925/httpd
3:查看是否有httpd进程存在
[root@apache application]# ps -ef|grep http
root 58925 1 0 10:32 ? 00:00:00 /application/apache2.2.31/bin/httpd -k start
daemon 58926 58925 0 10:32 ? 00:00:00 /application/apache2.2.31/bin/httpd -k start
daemon 58927 58925 0 10:32 ? 00:00:00 /application/apache2.2.31/bin/httpd -k start
daemon 58928 58925 0 10:32 ? 00:00:00 /application/apache2.2.31/bin/httpd -k start
daemon 58929 58925 0 10:32 ? 00:00:00 /application/apache2.2.31/bin/httpd -k start
daemon 59016 58925 0 10:34 ? 00:00:00 /application/apache2.2.31/bin/httpd -k start
4:在服务器本地wget http://192.168.17.16 测试
注意:如果前面第2步和第3步都不符合要求,这步就不用查了,一定不行,直接下一步检查
这里把服务器本地当作客户端模拟用户检查http服务,此条的检查比第2步第3步的检查会更准确。同时可以排除防火墙的干扰来检查http服务,如果正常访问,说明apache服务没问题,那么就是网络或防火墙等问题了。
5:查看apache的错误日志看看是否有特殊异常
如果以上5条全都注意到了,基本问题就可以解决,如果是2,3步异常,则可以查看apache错误日志,获取信息
[root@apache application]# tail -10 /application/apache/logs/error_log
APACHE的默认站点目录,是安装目录下的/apache/htdocs,这可以从APACHE主配置文件/application/apache/conf/httpd.conf中可以查到:
[root@Web-Lamp application]# grep -i documentroot ./apache/conf/httpd.conf
# DocumentRoot: The directory out of which you will serve your
DocumentRoot "/application/apache2.2.31/htdocs"
# This should be changed to whatever you set DocumentRoot to.
# access content that does not live under the DocumentRoot.
此时,如果要部署网站服务,只需要把开发好的程序放置到/application/apache2.2.32/htdocs目录下即可!至此Apache的安装已完成!
APACHE的目录结构
[root@Web-Lamp apache]# tree bin
bin
├── ab #APACHE HTTP服务器性能测试工具,简单,易用。同类软件还有jmeter,loadrunner,webbench等
├── apachectl #这是APACHE的启动命令,需重点掌握,apachectl是一个脚本
├── apxs #apxs是一个为apache http服务器编译和安装扩展模块的工具,在进行DSO方式模块编译时会用到
#后文在编译php软件时就用到此命令,如:--with-apxs2=/application/apache/apxs
├── htcacheclean #这是清理磁盘缓冲区的命令,需要在编译时指定相关参数才可使用,一般用的很少
├── htpasswd #建立和更新基本认证文件,如:配置nagios等监控服务时会用到
├── httpd #此为apache的控制命令程序,apachectl执行时会调用httpd
└── rotatelogs #apache自带的日志轮询命令,也还可以用,但在实际生产环境中习惯由cronolog替换它
提示:以上目录只列出了工作中比较常用的命令,其它末使用过的略过!
[root@Web-Lamp apache]# tree conf
conf
├── extra #这是额外的apache配置文件目录,这个目录里的文件会经常访问修改:如httpd-vhosts.conf
├── httpd.conf #apache的主配置文件,这个文件我们会经常访问修改,其中的每一行参数都应该弄清楚
APACHE扩展的配置文件
apache的扩展配置文件是通过在httpd.conf主配置文件中嵌入include命令实现的,不过默认情况下是注释状态。如下所示:
395 # Virtual hosts
396 #Include conf/extra/httpd-vhosts.conf
通过tree命令列出apache扩展的配置文件的在目录的配置文件
[root@Web-Lamp apache]# tree conf/extra
conf/extra
├── httpd-autoindex.conf
├── httpd-dav.conf
├── httpd-default.conf #这个文件里配置的是apache的相关服务参数,如:超时时间,保持连接时间等
├── httpd-info.conf
├── httpd-languages.conf #语言支持配置
├── httpd-manual.conf
├── httpd-mpm.conf #服务器池管理,也就是优化apache的一个配置文件,如:选择apache的模式连接数等,常用的模式有worker模式和profork模式,默认情况下是profork模式!
├── httpd-multilang-errordoc.conf
├── httpd-ssl.conf #提供apache SSL支持配置文件
├── httpd-userdir.conf
└── httpd-vhosts.conf #虚拟主机配置文件
APACHE虚拟主机的配置文件
[root@Web-Lamp apache]# grep -Ev "^#|^$" conf/extra/httpd-vhosts.conf
NameVirtualHost *:80
#这里表示使用基于名称的虚拟主机配置,这是生产环境下最常用的配置。*:80中的*表示监听本机所有IP地址,80表示在80端口上提供http服务。如果*改为具体IP,就表示监听本机指定IP地址的服务请求
<VirtualHost *:80> #定义一个虚拟主机,监听本机所有IP地址80端口上提供的http服务请求
ServerAdmin [email protected]
DocumentRoot "/application/apache2.2.31/docs/dummy-host.example.com"
ServerName dummy-host.example.com
ServerAlias www.dummy-host.example.com
#这是配置虚拟机的别名,也就是可以配置多个域名访问同一个站点,如:此处配置成baidu.com,则输入baidu.com可以得到和www.baidu.com同样的结果,此功能需要apache mode_alias模块支持
ErrorLog "logs/dummy-host.example.com-error_log"
CustomLog "logs/dummy-host.example.com-access_log" common
</VirtualHost>
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "/application/apache2.2.31/docs/dummy-host2.example.com"
ServerName dummy-host2.example.com
ErrorLog "logs/dummy-host2.example.com-error_log"
CustomLog "logs/dummy-host2.example.com-access_log" common
</VirtualHost>
基于域名的虚拟主机实战配置
开启主配置文件httpd.cond中包含httpd-vhost.conf文件的配置:
[root@Web-Lamp apache]# vim /application/apache/conf/httpd.conf
395 # Virtual hosts
396 Include conf/extra/httpd-vhosts.conf #将此行前面的#号去掉
配置httpd-vhosts.conf文件:
[root@Web-Lamp extra]# cp httpd-vhosts.conf httpd-vhosts.conf.poe.20161010
备份后把httpd-vhosts.conf文件中的<VirtualHost *.80></VirtualHost>删除,只保留一个,然后在这一个的基础上修改
检查修改过的apache配置文件的语法:
生产环境中这一步,特别重要,它让你在重起前可以查出配置文件中的错误,如果没有此步,很可能会因为配置错误,而导致网站短时宕机,这在正规互联网公司是无法接受的,即使公司可以接受,我们也要表现的更专业。
[root@Web-Lamp extra]# /application/apache/bin/apachectl -t
Warning: DocumentRoot [/var/html/blog] does not exist #没有/var/html/blog这个目录
httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.17.12 for ServerName
Syntax OK
httpd:Cound......这一行的提示解决方案:
[root@Web-Lamp conf]# vim httpd.conf
96 # If your host doesn't have a registered DNS name, enter its IP address here.
97 #如果你没有注册的DNS域名,这里可以输入IP地址
98 #ServerName www.example.com:80
99
100 ServerName 192.168.17.12
再次检查语法:
[root@Web-Lamp conf]# /application/apache/bin/apachectl -t
Syntax OK
语法检查通过后,执行graceful参数重起apache服务:
[root@Web-Lamp apache]# bin/apachectl graceful
注意:这里是graceful参数,而不是restart参数,graceful表示优雅地重启,这个参数可以在重启时使正在浏览器的访问的用户无感知,即重启时不会强行中断用户的访问请求,而是处理完毕后再重新启动。这个graceful参数在生产环境中是非常重要,请在重启时务必使用graceful替代restart参数