17.9 Apache安装过程
-
Apache:作为LAMP架构的前端是一款功能强大,稳定性好的Web服务器程序,该服务器直接面向用户提供网站访问,发送网页,图片等文件内容。之前的名称就叫做 Apache,不过后来改名字叫做 httpd另外,Apache 就是 LAMP 环境中的“A”。前面做了这么多准备工作,就是为了正确安装 Apache+MYSQL+PHP,现在可以安装 Apache 了。安装步骤如下。
-
用
rpm -q 包名
检查下系统有没有安装以下c/c++/源码编译器和支持类库,没有的使用yum -y install 包名
来安装
#安装一下编译器,perl的接口开发包,用于支持网站解析HTML、XML文件
yum -y install \
gcc \
gcc-c++ \
make \
pcre-devel \
expat-devel \
perl
- 复制 apr 和 apr-util 库:这里是 Apache 2.4 自己的 Bug,我们必须手工复制 apr、apr-util 和 pcre 这三个库,才可以正确安装 Apache 2.4。
#这两个包先要解压缩,然后改名复制到指定位置
[root@CncLucZK ~]# cp -r /usr/local/src/apr-1.7.0 /usr/local/src/httpd-2.4.54/srclib/apr
[root@CncLucZK ~]# cp -r /usr/local/src/apr-util-1.6.1 /usr/local/src/httpd-2.4.54/srclib/apr-util
2.安装 pcre 源码包:pcre 是一个用 C 语言编写的正则表达式函数库,Apache 和 PHP 默认使用的就是 pcre 正则表达式规则。
#进入解压缩目录
[root@CncLucZK ~]# cd /usr/local/src/pcre-8.45
#编译前配置
[root@CncLucZK pcre-8.45]# ./configure
#编译
[root@CncLucZK pcre-8.45]# make
#编译安装
[root@CncLucZK pcre-8.45]# make install
3.进入 Apache 解压缩目录,编译前配置,编译和编译安装
#进入解压缩目录
[root@CncLucZK pcre-8.45]# cd /usr/local/src/httpd-2.4.54
#编译前配置 --指定Apache安装目录 --指定Apache配置文件保存目录 --使用捆绑APR/APR-Util 的副本 --以动态共享对象(DSO)方式编译
#--启用传输编码支持的模块 --根据用户的特别设定来生成失效和隐藏控制的HTTP头信息 --启动重写功能的模块
[root@CncLucZK httpd-2.4.54]# ./configure --prefix=/usr/local/apache2/ --sysconfdir=/usr/local/apache2/etc/ --with-included-apr --enable-so --enable-deflate=shared --enable-expires=shared --enable-rewrite-shared
#编译和编译安装
[root@CncLucZK httpd-2.4.54]# make
[root@CncLucZK httpd-2.4.54]# make install
-
这里的 Apache 是使用动态方式编译的,也有静态方式编译,静态方式编译就是直接将 Apache 的模块放入 Apache 中,如果 Apache 需要调用这个模块,则直接调用即可。这种方法安装的 Apache 性能更好、速度更快,但是如果需要加载新的模块,则是需要重新编译和安装 Apache 的。
-
如果采用动态的方式编译,则并没有直接把模块放入 Apache,而是把模块的所在位置放入了 Apache。如果 Apache 需要调用模块,则需要到指定位置自己查找,性能比静态方式稍差。但是如果需要加载新的模块,则不用重新安装 Apache,可以动态地加载新模块。更常用的编译方式是动态方式编译,所以在安装过程中我们采用动态方式编译。
5.启动Apache,并进行测试
#启动Apache
[root@CncLucZK httpd-2.4.54]# /usr/local/apache2/bin/apachectl start
#查看80端口,已经启动,说明Apache已经启动了
[root@CncLucZK httpd-2.4.54]# netstat -tlun |grep 80
tcp6 0 0 :::80 :::* LISTEN
#查看httpd进程打开的文件,说明启动的是源码包安装的apache服务,非rpm默认安装的apache服务
[root@CncLucZK httpd-2.4.54]# lsof -c httpd
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 2994895 root cwd DIR 253,1 4096 2 /
httpd 2994895 root rtd DIR 253,1 4096 2 /
httpd 2994895 root txt REG 253,1 2864720 1707779 /usr/local/apache2/bin/httpd
httpd 2994895 root mem REG 253,1 73264 26808
-
使用浏览器测试一下 Apache 服务器是否可以访问,只需在 URL(统一资源定位,就是地址栏)中输入“http://IP”即可
-
看到了“It works!”,则说明 Apache 服务器正常工作了。
-
上面的文字还可以修改,配置文件在 /usr/local/apache2/htdocs/ 下
[root@CncLucZK local]# cd /usr/local/apache2/htdocs
[root@CncLucZK htdocs]# ll
total 4
-rw-r--r-- 1 root root 45 Jun 12 2007 index.html
[root@CncLucZK htdocs]# vi index.html
<html><body><h1>Hello Apache!</h1></body></html> #wq保存退出
6.设置 Apache 开机自启动: Apache 每次开机都能正常启动,所以还要设置自启动,命令如下:
#在rc.local文件中加入Apache启动命令
[root@CncLucZK xinetd.d]# vi /etc/rc.d/rc.local
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local
/etc/rc.d/init.d/bt start
/usr/local/apache2/bin/apachectl start
#加入源码包服务的标准启动命令,保存退出,源码包安装的apache服务就被设为自启动了
- 让源码包安装的apache服务能被service命令管理启动
#优化配置文件路径,并把httpd服务的可执行程序文件放入路径环境变量的目录中便于系统识别
[root@CncLucZK apache2]# ln -s /usr/local/apache2/bin/* /usr/local/bin/
[root@CncLucZK ~]# ln -s /usr/local/apache2/bin/apachectl /etc/init.d/apache
#service命令其实只是在/etc/init.d/目录中查找是否有服务的启动脚本,所以我们只需要做一个软链接,把源码包的启动脚本链接到/etc/init.d/目录中,就能被service命令所管理了。把软链接文件命名为apache,注意这不是RPM包默认安装的apache服务
[root@CncLucZK ~]# service apache restart
#虽然RPM包默认安装的apache服务被卸载了,但是service命令也能够生效
#检查语法
[root@CncLucZK ~]#httpd -t
Syntax OK
apache启动错误
AH00558: httpd: Could not reliably determine the server’s fully qualified domain name, using ::1. Set the ‘ServerName’ directive globally to suppress this message
解决方法:将 apache 的配置文件httpd.conf中的 ServerName 改成可用域名或如下配置,不要与已有的端口重复即可
ServerName localhost:80
然后在关闭apache后在启动使配置生效
[root@CncLucZK php]# service apache stop [root@CncLucZK php]# service apache start [root@CncLucZK php]# systemctl restart apache [root@CncLucZK php]# systemctl status apache
- 让源码包安装的apache服务能被chkconfig命令管理自启动
[root@CncLucZK ~]# vi /etc/init.d/apache
#修改源码包安装的apache服务的启动脚本(注意此文件是软链接,所以修改的还是源码包启动脚本)
#!/bin/sh
#
chkconfig: 35 86 76
#指定httpd脚本可以被chkconfig命令所管理
#格式是:chkconfig:运行级别 启动顺序 关闭顺序
#这里我们让apache服务在3和5级别中能被chkconfig命令所管理,启动顺序是S86,关闭顺序是K76
#(自定顺序,不要和系统中已有的启动顺序冲突)
description: source package apache
#说明,内容随意
#以上两元素必须加入,才能被chkconfig命令所识别 ...省略部分输出...
[root@CncLucZK ~]# chkconfig --add apache
#让chkconfig命令能够管理源码包安装的apache服务
[root@CncLucZK ~]# chkconfig --list | grep apache
apache 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭
#RPM包默认安装的apache服务被删除了,但是chkconfig命令可以管理源码包安装的tapache服务