“Apache HTTP Server”
是
ASF
旗下著名的软件项目之一,其正式名称是
“httpd”
,
也就是历史上的
Apache
网站服务器。在后续内容中,若未作特殊说明,使用
“Apache”
或者
“httpd”
,均指的是
“Apache HTTP Server”
。
2
.
Apache
的主要特点
Apache
服务器在功能、性能和安全性等方面的表现都是比较突出的,可以较好地
满足
Web
服务器用户的应用需求。其主要特点包括以下几个方面。
?
开放源代码:这是
Apache
服务器的重要特性之一,也是其他特性的基础。
Apache
服务程序由全世界的众多开发者共同维护,并且任何人都可以自由使用,这充分体
现了开源软件的精神。
?
跨平台应用:这个特性得益于
Apache
的源代码开放。
Apache
服务器可以运行在
绝大多数软硬件平台上,所有
UNIX
操作系统都可以运行
Apache
服务器,甚至
Apache
服务器可以良好地运行在大多数
Windows
系统平台中。
Apache
服务器的
跨平台特性使其具有被广泛应用的条件。
?
支持各种
Web
编程语言:
Apache
服务器可支持的网页编程语言包括
Perl
、
PHP
、
Python
、
Java
等,甚至微软的
ASP
技术也可以在
Apache
服务器中使用。支持各
种常用的
Web
编程语言使
Apache
具有更广泛的应用领域。
?
模块化设计:
Apache
并没有将所有的功能集中在单一的服务程序内部,而是尽可
能地通过标准的模块实现专有的功能,这为
Apache
服务器带来了良好的扩展性。
其他软件开发商可以编写标准的模块程序,从而添加
Apache
本身并不具有的
其他功能。
?
运行非常稳定:
Apache
服务器可用于构建具有大负载访问量的
Web
站点,很多知
名的企业网站都使用
Apache
作为
Web
服务软件。
?
良好的安全性:
Apache
服务器具有相对较好的安全性,这是开源软件共同具有的
特性。并且,
Apache
的维护团队会及时对已发现的漏洞提供修补程序,为
Apache
的所有使用者提供尽可能安全的服务器程序。
2.1.2
安装
httpd
服务器
在配置
Apache
网站服务之前,需要正确安装好
httpd
服务器软件。
httpd
服务器的
安装可以选用
RPM
安装、源码编译安装这两种方式,前者相对比较简单、快速,但是
在功能上存在一定的局限性。在实际的生产环境中,使用源码编译安装的方式要更加普
本小节将以下载的源码包
httpd-2.4.25.tar.gz
为例,介绍
httpd
服务的定制安装过程。
1
.准备工作
为了避免发生端口冲突、程序冲突等现象,建议卸载使用
RPM
方式安装的
httpd
。
httpd
服务编译安装时需要依赖
apr-util-devel
、
pcre-devel
等软件,因此在
httpd
编译安
装之前需要先安装依赖软件。
[root@nmd ~]# rpm -e httpd --nodeps
[root@nmd ~]# yum install -y apr-util-devel pcre-devel
2
.源码编译及安装
(
1
)解包
将下载获得的
httpd
源码包解压并释放到
/usr/src
目录下,且切换到展开后的源码目
录中。
[root@nmd ~]# tar zxf httpd-2.4.25.tar.gz -C /usr/src
[root@nmd ~]# cd /usr/src/httpd-2.4.25/
(
2
)配置
根据服务器的实际应用需要,可以灵活设置不同的定制选项,如指定安装路径、启
用字符集支持等。若要获知可用的各种配置选项及其含义,可以执行
“./configure --help”
命令。
[root@nmd httpd-2.4.25]# ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi
上述配置命令中,各选项的含义如下。
?
--prefix
:指定将
httpd
服务程序安装到哪个目录下,如
/usr/local/httpd
。
?
--enable-so
:启用动态加载模块支持,使
httpd
具备进一步扩展功能的能力。
?
--enable-rewrite
:启用网页地址重写功能,用于网站优化及目录迁移维护。
?
--enable-charset-lite
:启用字符集支持,以便支持使用各种字符集编码的网页。
?
--enable-cgi
:启用
CGI
脚本程序支持,便于扩展网站的应用访问能力。
(
3
)编译及安装
完成配置以后,执行
“make”
命令进行编译,将源代码转换为可执行的程序;然后执
行
“make install”
命令完成最后的安装过程;将编译完的
httpd
程序及相关目录、文件自
动复制到预设的安装目录(由配置时的
“--prefix”
选项指定)。其中
“make”
的过程可能会
需要较长的时间。
[root@nmd httpd-2.4.25]# make && make install
3
.确认安装结果
由于指定的安装目录为
/usr/local/httpd
,因此
httpd
服务的各种程序、模块、帮助文
件等都将复制到此目录下。
[root@nmd ~]# ls /usr/local/httpd/
bin build cgi-bin conf error htdocs icons include logs man manual modules
在安装后的
/usr/local/httpd
目录下包含
httpd
服务相关的各种子目录,主要子目录
的用途如下。
?
/usr/local/httpd/bin
:存放
httpd
服务的各种可执行程序文件,包括主程序
httpd
、服
务控制工具
apachectl
等。
?
/usr/local/httpd/conf
:存放
httpd
服务的各种配置文件,包括主配置文件
httpd.conf
、
增强配置子目录
extra
等。
?
/usr/local/httpd/htdocs
:存放网页文档,包括默认首页文件
index.html
等。
?
/usr/local/httpd/logs
:存放
httpd
服务的日志文件。
?
/usr/local/httpd/modules
:存放
httpd
服务的各种模块文件。
?
/usr/local/httpd/cgi-bin
:存放各种
CGI
4
.优化执行路径
通过源码编译安装的
httpd
服务,程序路径并不在系统默认的搜索路径中,为了使
该服务在使用时更加方便,可以为相关程序添加符号链接。
[root@nmd ~]# ln -s /usr/local/httpd/bin/* /usr/local/bin/
[root@nmd ~]# ls -l /usr/local/bin/httpd /usr/local/bin/apachectl
lrwxrwxrwx. 1 root root 30 1月 2 11:14 /usr/local/bin/apachectl -> /usr/local/httpd/bin/apachectl
lrwxrwxrwx. 1 root root 26 1月 2 11:14 /usr/local/bin/httpd -> /usr/local/httpd/bin/httpd
[root@nmd ~]#
这样,在执行相关命令时就不用输入冗长的路径了。例如,当执行
“httpd-v”
命令(用
于查看程序版本)时,即相当于执行
“/usr/local/httpd/bin/httpd-v”
命令。
[root@nmd ~]# httpd -v
Server version: Apache/2.4.25 (Unix)
Server built: Jan 2 2024 11:10:19
5
.添加
httpd
系统服务
在
/lib/systemd/system/
目录下,建立一个以
.service
结尾的单元(
unit
)配置文件,
用于控制由
Systemd
管理或监控的
httpd
服务。
[root@nmd ~]# cd /lib/systemd/system
[root@nmd system]# vim httpd.service
[Unit]
Description=The Apache HTTP Server
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/httpd/logs/httpd.pid
ExecStart=/usr/local/bin/apachectl $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
[Install]
wantedBy=graphical.target
[root@nmd system]# systemctl start httpd.service
[root@nmd system]# systemctl enable httpd.service
成功执行上述操作后,在日常维护过程中,可直接使用
apachectl
工具或
systemctl
命令控制
httpd
服务。
2.2 httpd
服务器的基本配置
熟悉了
httpd
服务器的安装过程及主要目录结构之后,本节将进一步介绍使用
httpd
服务来架设
Web
站点的基本过程及常见配置。
2.2.1 Web
站点的部署过程
在
CentOS 7.3
系统中,使用
httpd
服务部署
Web
站点的基本过程分析如下。
1
.确定网站名称、
IP
地址
若要向
Internet
中发布一个
Web
站点,需要申请一个合法的互联网
IP
地址,并向
DNS
服务提供商注册一个完整的网站名称。在企业内部网络中,这些信息可以自行设
置。例如
Web
主机的
IP
地址为 192.168.248.213
,网站名称为
www.bdqn.com
。
若要在客户机的浏览器中通过地址
www.bdqn.com
来访问此
Web
站点,还应该有可
用的
DNS
域名服务。例如,客户机所使用的
DNS
服务器应能够将
www.bdqn.com
解析
为
IP
地址 192.168.248.213
。
2
.配置并启动
httpd
服务
(
1
)配置
httpd
服务
编辑
httpd
服务的主配置文件
httpd.conf
,查找配置项
“ServerName”
,在附近添加
一行内容
“ServiceName www.bdqn.com”
,用于设置网站名称。
[root@nmd ~]# vim /usr/local/httpd/conf/httpd.conf
ServerName www.bdqn.com
修改
httpd.conf
文件的配置内容后,建议使用带
“-t”
选项的
apachectl
命令对配置内
容进行语法检查(或使用
“httpd-t”
命令)。如果没有语法错误,将会显示
“Syntax OK”
的
信息,否则需要根据错误提示信息来修正配置。
[root@nmd ~]# /usr/local/httpd/bin/apachectl -t
Syntax OK
[root@nmd ~]#
(
2
)启动
httpd
服务
使用
systemctl
命令启动
httpd
服务。正常启动
httpd
服务以后,默认将监听
TCP
协议的
80
端口。
[root@nmd ~]# netstat -anpt | grep httpd
tcp6 0 0 :::80 :::* LISTEN 26970/httpd
[root@nmd ~]#
3
.部署网页文档
对于新编译安装的
httpd
服务,网站根目录位于
/usr/local/httpd/htdocs
下,需要将
Web
站点的网页文档复制或上传到此目录下。
httpd
服务器默认已提供了一个名为
index.html
的测试网页(可显示字串
“It works
!
”
),作为访问网站时的默认首页。
[root@nmd ~]# cat /usr/local/httpd/htdocs/index.html
<html><body><h1>It works!</h1></body></html>
[root@nmd ~]#
4
.在客户机中访问
Web
站点
在客户机的网页浏览器中,通过域名或
IP
地址访问
httpd
服务器,将可以看到
Web
站点的页面内容。若使用的是
httpd
服务默认的首页,则页面会显示
“It works
!
”
,表示
httpd
服务已经正常运作。
5
.查看
Web
站点的访问情况
httpd
服务器使用了两种类型的日志:访问日志和错误日志。这两种日志的文件名
分别为
access_log
和
error_log
,均位于
/usr/local/httpd/logs
目录下。
通过查看访问日志文件
access_log
,可以及时了解
Web
站点的访问情况。访问日
志中的每一行对应一条访问记录,记录了客户机的
IP
地址、访问服务器的日期和时间、
请求的网页对象等信息。例如,当从客户机
173.17.17.2
访问
Web
站点以后,访问日
志将会记录
“192.168.248.1……"GET/HTTP/1.1"……”
的消息。
[root@nmd ~]# tail /usr/local/httpd/logs/access_log
192.168.248.1 - - [02/Jan/2024:11:52:56 +0800] "GET / HTTP/1.1" 200 45
192.168.248.1 - - [02/Jan/2024:11:52:56 +0800] "GET /favicon.ico HTTP/1.1" 404 209
[root@nmd ~]#
通过查看错误日志文件
error_log
,可以为排查服务器运行故障提供参考依据。错误
日志文件中的每一行对应一条错误记录,记录了发生错误的日期和时间、错误事件类型、
错误事件的内容描述等信息
上述过程是使用
httpd
服务器部署并验证
Web
站点的基本步骤,其中涉及
httpd.conf
配置文件的改动量非常少,要搭建一台简单的
Web
服务器还是十分容易的。
2.2.2 httpd.conf
配置文件
若要对
Web
站点进行更加具体、更加强大的配置,仅仅学会添加
“ServerName”
配
置项显然是远远不够的,还需要进一步熟悉
httpd.conf
配置文件,了解其他各种常见的
配置项。
主配置文件
httpd.conf
由注释行、设置行两部分内容组成。与大多数
Linux
配置文
件一样,注释性的文字以
“#”
开始,包含了对相关配置内容进行的说明和解释。除了注释
行和空行以外的内容即设置行,构成了
Web
服务的有效配置。根据配置所作用的范围
不同,设置行又可分为全局配置、区域配置。
1
.全局配置项
全局配置决定
httpd
服务器的全局运行参数,使用
“
关键字 值
”
的配置格式。例如,
配置网站名称时使用的
“ServerName www.kgc.com”
,其中
“ServerName”
为配置关键字,
而
“www.kgc.com”
为对应的值。
每一条全局配置都是一项独立的配置,不需要包含在其他任务区域中。以下列出了
httpd.conf
文件中最常用的一些全局配置项。
ServerRoot "/usr/local/httpd" Listen 80
User daemon
Group daemon
ServerAdmin webmaster@kgc.com
ServerName www.kgc.com
DocumentRoot "/usr/local/httpd/htdocs" DirectoryIndex index.htmlindex.php
ErrorLog "logs/error_log" LogLevel warn
CustomLog logs/access_log common
PidFile logs/httpd.pid
AddDefaultCharset UTF-8
Include conf/extra/httpd-default.conf
在上述设置行中,各全局配置项的含义如下。
?
ServerRoot
:设置
httpd
服务器的根目录,该目录下包括了运行
Web
站点必需的子
第
11
页 共
35
页
目录和文件。默认的根目录为
/usr/local/httpd
,与
httpd
的安装目录相同。在
httpd.conf
配置文件中,如果指定目录或文件位置时不使用绝对路径,则目录或文
件位置都认为是在服务器的根目录下。
?
Listen
:设置
httpd
服务器监听的网络端口号,默认为
80
。
?
User
:设置运行
httpd
进程时的用户身份,默认为
daemon
。
?
Group
:设置运行
httpd
进程时的组身份,默认为
daemon
。
?
ServerAdmin
:设置
httpd
服务器的管理员
E-mail
地址,可以通过此
E-mail
地址及
时联系
Web
站点的管理员。
?
ServerName
:设置
Web
站点的完整主机名(主机名
+
域名)。
?
DocumentRoot
:设置网站根目录,即网页文档在系统中的实际存放路径。此配置
项比较容易和
ServerRoot
混淆,需要格外注意。
?
DirectoryIndex
:设置网站的默认索引页(首页),可以设置多个首页文件,以空格
分开,默认的首页文件为
index.html
。
?
ErrorLog
:设置错误日志文件的路径,默认路径为
logs/error_log
。
?
LogLevel
:设置记录日志的级别,默认级别为
warn
(警告)。
?
CustomLog
:设置访问日志文件的路径、日志类型,默认路径为
logs/access_log
,
使用的类型为
common
(通用格式)。
?
PidFile
:设置用于保存
httpd
进程号(
PID
)的文件,默认保存地址为
logs/httpd.pid
,
logs
目录位于
Apache
的服务器根目录下。
?
AddDefaultCharset
:设置站点中的网页默认使用的字符集编码,如
UTF-8
、
gb2312
等。
?
Include
:包含另一个配置文件的内容,可以实现将一些特殊功能的配置放到一个单
独的文件中,再使用
Include
配置项将其包含到
httpd.conf
文件中,这样便于独立
进行配置功能的维护而不影响主配置文件。
以上配置项是
httpd.conf
文件中主要的全局配置项。还有其他很多配置项,在此不
一一列举,如果需要使用可以查看
Apache
服务器中的相关帮助手册文档。
2
.区域配置项
除了全局配置项以外,
httpd.conf
文件中的大多数配置是包括在区域中的。区域
配置使用一对组合标记,限定了配置项的作用范围。例如,最常见的目录区域配置的形
式如下所示。
<Directory /> //定义"/"目录区域的开始
Options FollowSymLinks //控制选项,允许使用符号链接
AllowOverride None //不允许隐含控制文件中的覆盖配置
Require all denied //禁止任何人访问此区域
</Directory> //定义"/"目录区域的结束
在以上区域定义中,设置了一个根目录的区域配置,其中添加的访问控制相关配置
只对
httpd
服务的根目录有效,而不会作用于全局或其他目录区域