目录
2.1Apache 网站服务基础
2.1.1Apache 简介
“Apache HTTP Server”是开源软件项目的杰出代表,它基于标准的HTTP网络协议提供网页浏览服务,在Web服务器领域中长期保持着超过半数的份额。Apache服务器可以运行在Linux、UNIX、Windows 等多种操作系统平台中。
1. Apache 的起源
Apache服务器是针对之前出现的若干个Web服务器程序进行整合、完善后形成的软件,其名称来源于“A Patchy Server”,意思是“基于原有Web服务程序的代码进行修改(补丁)后形成的服务器程序”。1995年,Apache服务程序发布了1.0版本,之后一直由“Apache Group”负责该项目的管理和维护;直到1999年,在“Apache Group”的基础上成立了Apache 软件基金会(ApacheSoftwareFoundation,ASF)。目前Apache项目一直由ASF负责管理和维护。
ASF是非盈利性质的组织,最初只负责“Apache Web”服务器项目的管理。随着Web应用需求的不断扩大,ASF逐渐增加了许多与Web技术相关的开源软件项目。因此Apache现在不仅仅代表着Web服务器,更广泛地代表着ASF管理的众多开源软件项目。ASF基金会的官方网站是http://www.apache.org/。
“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安装、源码编译安装这两种方式,前者相对比较简单、快速,但是在功能上存在一定的局限性。在实际的生产环境中,使用源码编译安装的方式要更加普遍。
1. 准备工作
为了避免发生端口冲突、程序冲突等现象,建议卸载使用RPM方式安装的httpd。httpd 服务编译安装时需要依赖apr-util-devel、pcre-devel 等软件,因此在httpd编译安装之前需要先安装依赖软件。
2.源码编译及安装
(1)解包
将下载获得的httpd 源码包解压并释放到/usr/src 日录下,且切换到展开后的源码目录中。
[root@localhost ~]# tar zxf httpd-2.4.25.tar.gz -c /usr/src
[root@localhost ~]# cd /usr/src/httpd-2.4.25/
(2)配置
根据服务器的实际应用需要,可以灵活设置不同的定制选项,如指定安装路径、启用字符集支持等。若要获知可用的各种配置选项及其含义,可以执行"./configure --help命令。
[root@locahost httpd-2.4.25]#,/configure --prefix=/usr/localhttpd --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"的过程可能会需要较长的时间。
3.确认安装结果
由于指定的安装目录为/usr/localhttpd,因此 httpd 服务的各种程序、模块、帮助文件等都将复制到此目录下。
[root@localhost ~]# ls /usr/localhttpd
bin cgi-bin error icons logs manual
build confhtdocs include man modules
在安装后的/usr/ocal/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/ogs:存放 httpd 服务的日志文件。
/usr/local/httpd/modules:存放 httpd 服务的各种模块文件。
/usr/local/httpd/cgi-bin:存放各种 CG| 程序文件。
4.优化执行路径
通过源码编译安装的 httpd 服务,程序路径并不在系统默认的搜索路径中,为了使该服务在使用时更加方便,可以为相关程序添加符号链接。
这样,在执行相关命令时就不用输入冗长的路径了。例如,当执行"httpd-v"命令(用于查看程序版本)时,即相当于执行"/usr/local/httpd/bin/httpd-v"命令。
[root@localhost ~]# httpd-v
Server version: Apache/2.4.25 (Unix)
Server built:Jan 10 2024 13:25:57
5. 添加 httpd 系统服务
在/lib/systemd/system/目录下,建立一个以.service结尾的单元(unit)配置文件,用于控制由Systemd管理或监控的httpd服务。
2.2 httpd服务器的基本配置
2.2.1 Web 站点的部署过程
在CentOS 7.3系统中,使用httpd服务部署Web站点的基本过程分析如下。
1. 确定网站名称、IP地址
若要向Internet中发布一个Web站点,需要申请一个合法的互联网IP地址,并向DNS服务提供商注册一个完整的网站名称。在企业内部网络中,这些信息可以自行设置。例如Web主机的IP地址为173.17.17.11,网站名称为www.kgc.com。若要在客户机的浏览器中通过地址www.kgc.com来访问此Web站点,还应该有可用的DNS域名服务。例如,客户机所使用的DNS服务器应能够将www.kgc.com解析为IP地址173.17.17.11。在Web服务器本机中,将IP地址设置为173.17.17.11;将主机名称设置为www.kgc.com;并修改/etc/hosts文件,添加相应的映射记录以提高本地解析速度。
[root@localhost ~]# hostname www.kgc.com[root@localhost ~]# vim /etc/hostname
www.kgc.com
[root@localhost ~]# vim /etc/hosts
173.17.17.11 ww.kgc.com
[root@locahost ~]# bash
[root@www ~]#
2.配置并启动 httpd 服务
(1)配置 httpd 服务
编辑 httpd 服务的主配置文件 httpd.conf,查找配置项“ServerName”,在附近添加一行内容"ServiceName www.kgc.com",用于设置网站名称。
[root@www ~]# vim /usr/local/httpd/conf/httpd.conf
……. //省略部分内容
ServerName www.kgc.com
修改 httpd.conf 文件的配置内容后,建议使用带"-t"选项的 apachectl 命令对配置内容进行语法检查(或使用"httpd-t"命令)。如果没有语法错误,将会显示"Syntax OK"的信息,否则需要根据错误提示信息来修正配置。
[root@www ~]#/usr/local/httpd/bin/apachectl -t
Syntax OK
(2)启动 httpd 服务
使用 systemctl 命令启动 httpd 服务。正常启动 httpd 服务以后,默认将监听 TCP协议的 80 端口。
3. 部署网页文档
对于新编译安装的httpd服务,网站根目录位于/usr/local/httpd/htdocs下,需要将Web站点的网页文档复制或上传到此目录下。httpd服务器默认已提供了一个名为index.html的测试网页(可显示字串“It works!”),作为访问网站时的默认首页。
[root@www~]# cat /usr/local/httpd/htdocs/index.html
<html><body><h1>lt works !< /h1></body></html>
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站点以后,访问日志将会记录“173.17.17.2 .. "GET/HTTP/1.1” ……. ”的消息。
[root@www ~]# tail /usr/local/httpd/logs/access_log
173.17.17.2 - - [04/Jul/2020:16:58:23+0800] "GET / HTTP/1.1" 200 45
173.17.17.2 - - [04/Jul/2020:16:58:23+0800] "GET /favicon.ico HTTP/1.1" 404 209
173.17.17.2 - - [04/Jul/2020:16:58:27 +0800] "GET / HTTP/1.1" 304 -
通过查看错误日志文件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: 设置 httpd 服务器的根目录,该目录下包括了运行 Web 站点必需的子目录和文件。默认的根目录为/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混淆,需要格外注意。
Directorylndex:设置网站的默认索引页(首页),可以设置多个首页文件,以空格分开,默认的首页文件为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文件中,这样便于独立进行配置功能的维护而不影响主配置文件。
2.区域配置项
除了全局配置项以外,httpd.conf 文件中的大多数配置是包括在区域中的。区域配置使用一对组合标记,限定了配置项的作用范围。例如,最常见的目录区域配置的形式如下所示。
在以上区域定义中,设置了一个根目录的区域配置,其中添加的访问控制相关配置只对 httpd 服务的根目录有效,而不会作用于全局或其他目录区域。
2.3构建虚拟Web主机
虚拟Web主机指的是在同一台服务器中运行多个Web站点,其中每一个站点实际上并不独立占用整个服务器,因此被称为“虚拟”Web主机。通过虚拟Web主机服务可以充分利用服务器的硬件资源,从而大大降低网站构建及运行成本。
使用httpd服务可以非常方便地构建虚拟主机服务器,只需要运行一个httpd服务就能够同时支撑大量的Web站点。httpd服务支持的虚拟主机类型包括以下三种。
>基于域名:为每个虚拟主机使用不同的域名,但是其对应的IP地址是相同的。例如,www.kgc.com和www.kcce.com站点的IP地址都是173.17.17.11。这是使用最为普遍的虚拟Web主机类型。
>基于IP地址:为每个虚拟主机使用不同的域名,且各自对应的IP地址也不相同。
这种方式需要为服务器配备多个网络接口,因此应用并不是非常广泛。
> 基于端口:这种方式并不使用域名、IP地址来区分不同的站点内容,而是使用了不同的TCP端口号,因此用户在浏览不同的虚拟站点时需要同时指定端口号才能访问。
在上述几种虚拟Web主机中,基于域名的虚拟主机是使用最为广泛的,也是本节介绍的重点内容。关于另外两种类型的虚拟主机,将只介绍其配置要点。另外,因不同类型的虚拟主机其区分机制各不相同,建议不要同时使用,以免相互混淆。
2.3.1基于域名的虚拟主机
本小节以实现两个虚拟Web主机www.kgc.com和www.kcce.com为例,使用一
台httpd服务器搭建,IP地址为173.17.17.11。具体构建过程介绍如下。
1. 为虚拟主机提供域名解析
首先需要向DNS服务提供商注册各虚拟Web站点的域名,以便当访问其中任何一个虚拟Web站点时,最终访问的都是同一个IP地址 -- 实际支撑所有虚拟Web站点的服务器的IP地址。在本小节的案例中,需要将两个虚拟Web主机www.kgc.com和www.kcce.com解析为同一个IP地址 -- 173.17.17.11。而在实际的httpd服务器173.17.17.11中,可以使用虚拟Web站点中的任何一个作为主机名称,如www.kgc.com。实验过程中可以自行搭建测试用的DNS服务器。主配置文件named.conf中需要
添加 kgc.com 和 kcce.com两个区域;各区域的地址数据库中均设置“Www -- >173.17.17.11”的A记录。确认客户机能够正确解析到www.kgc.com和www.kcce.com的地址。例如,若要在IP地址为173.17.17.2的服务器中构建BIND服务,具体配置方法就不赘了。
2. 为虚拟主机准备网页文档
为每个虚拟Web主机准备网站目录及网页文档。为了测试方便,分别为每个虚拟Web 主机提供包含不同内容的首页文件。例如,在/var/www/html目录下创建两个子文件夹kgccom、kccecom,分别作为www.kgc.com和www.kcce.com的网站根目录,并分别编写测试网页文件。
3.添加虚拟主机配置
在httpd服务器的主配置文件中,若要启用基于域名的虚拟Web主机,通常需要配置以下几个方面的内容。
虚拟主机区域:使用<VirtualHost 监听地址>..</VirtualHost>区域配置,为每一个虚拟 Web 主机建立独立的配置内容。其中至少应包括虚拟主机的网站名称、网页根目录的配置项;其他(如管理邮箱、访问日志等)配置项可根据实际需要添加。目录权限:使用<Directory 目录位置>..</Directory>区域配置,为每一个虚拟Web 主机的网站目录设置访问权限,如允许任何人访问。目录访问可以继承其父目录的授权许可,因此可以采取直接为父文件夹授权访问权限的方法来简化配置。当虚拟 Web 主机的数量较多时,建议使用独立的虚拟主机配置文件,然后在httpd.conf 文件中通过 Include 加载这些配置。这样可以将对 httpd.conf 文件的改动减至最少,更方便配置内容更易于维护。