目录
LAMP 架构是目前成熟的企业网站应用模式之一,指的是协同工作的一整套系统和 相关软件,能够提供动态 Web 站点服务及其应用开发环境。LAMP 是一个缩写词,具 体包括 Linux 操作系统、Apache 网站服务器、MySQL 数据库服务器、PHP(或 Perl、 Python)网页编程语言。本章将以源码编译的方式搭建 LAMP 环境,能够满足企业定制化的需求。?
在构建 LAMP 平台时,各组件的安装顺序依次为 Linux、Apache、MySQL、PHP。 其中 Apache 和 MySQL 的安装并没有严格的顺序;而 PHP 环境的安装一般放到最后, 负责沟通 Web 服务器和数据库系统以协同工作?。
本节将介绍“Apache HTTP Server”的特点及其编译安装过程。?
“Apache HTTP Server”是开源软件项目的杰出代表,它基于标准的 HTTP 网络协议提供网页浏览服务,在 Web 服务器领域中长期保持着超过半数的份额。Apache 服务器可以运行在 Linux、UNIX、Windows 等多种操作系统平台中。?
Apache 服务器是针对之前出现的若干个 Web 服务器程序进行整合、完善后形成的 软件,其名称来源于“A Patchy Server”,意思是“基于原有 Web 服务程序的代码进行修 改(补丁)后形成的服务器程序”。?
1995 年, Apache 服务程序发布了 1.0 版本,之后一直由“Apache Group”负责该 项目的管理和维护;直到 1999 年,在“Apache Group”的基础上成立了 Apache 软件基 金会(Apache Software Foundation,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”。
Apache 服务器在功能、性能和安全性等方面的表现都是比较突出的,可以较好地满足 Web 服务器用户的应用需求。其主要特点包括以下几个方面。?
在配置 Apache 网站服务之前,需要正确安装好 httpd 服务器软件。httpd 服务器的 安装可以选用 RPM 安装、源码编译安装这两种方式,前者相对比较简单、快速,但是 在功能上存在一定的局限性。在实际的生产环境中,使用源码编译安装的方式要更加普 第遍。
本小节将以下载的源码包httpd-2.4.25.tar.gz 为例,介绍 httpd 服务的定制安装过程。
为了避免发生端口冲突、程序冲突等现象,建议卸载使用 RPM 方式安装的 httpd。 httpd服务编译安装时需要依赖 apr-util-devel、pcre-devel 等软件,因此在 httpd 编译安 装之前需要先安装依赖软件。?
[root@centos7-1 ~]# rpm -e httpd --nodeps
错误:未安装软件包 httpd
[root@centos7-1 ~]# yum install -y apr-util-devel.x86_64 pcre-devel.x86_64
将下载获得的 httpd 源码包解压并释放到/usr/src 目录下,且切换到展开后的源码目录中。?
[root@centos7-1 ~]# tar zxf httpd-2.4.25.tar.gz -C /usr/src/
[root@centos7-1 ~]# cd /usr/src/httpd-2.4.25/
[root@centos7-1 httpd-2.4.25]#
根据服务器的实际应用需要,可以灵活设置不同的定制选项,如指定安装路径、启用字符集支持等。若要获知可用的各种配置选项及其含义,可以执行“./configure --help” 命令。?
[root@centos7-1 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 脚本程序支持,便于扩展网站的应用访问能力。?
完成配置以后,执行“make”命令进行编译,将源代码转换为可执行的程序;然后执 行“make install”命令完成最后的安装过程;将编译完的 httpd 程序及相关目录、文件自 动复制到预设的安装目录(由配置时的“--prefix”选项指定)。其中“make”的过程可能会需要较长的时间。?
[root@centos7-1 httpd-2.4.25]# make && make install
由于指定的安装目录为/usr/local/httpd,因此 httpd 服务的各种程序、模块、帮助文 件等都将复制到此目录下。?
[root@centos7-1 ~]# ls /usr/local/httpd/
bin build cgi-bin conf error htdocs icons include logs man manual modules
[root@centos7-1 ~]#
在安装后的/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?
通过源码编译安装的 httpd 服务,程序路径并不在系统默认的搜索路径中,为了使该服务在使用时更加方便,可以为相关程序添加符号链接。?
[root@centos7-1 ~]# ln -s /usr/local/httpd/bin/* /usr/local/bin/
[root@centos7-1 ~]# ls -l /usr/local/bin/httpd /usr/local/bin/apachectl
lrwxrwxrwx 1 root root 30 1月 3 15:18 /usr/local/bin/apachectl -> /usr/local/httpd/bin/apachectl
lrwxrwxrwx 1 root root 26 1月 3 15:18 /usr/local/bin/httpd -> /usr/local/httpd/bin/httpd
[root@centos7-1 ~]#
这样,在执行相关命令时就不用输入冗长的路径了。例如,当执行“httpd-v”命令(用于查看程序版本)时,即相当于执行“/usr/local/httpd/bin/httpd-v”命令。?
[root@centos7-1 ~]# httpd -v
Server version: Apache/2.4.25 (Unix)
Server built: Jan 3 2024 15:16:34
[root@centos7-1 ~]#
在/lib/systemd/system/目录下,建立一个以.service 结尾的单元(unit)配置文件, 用于控制由 Systemd 管理或监控的 httpd 服务。?
[root@centos7-1 ~]# cd /lib/systemd/system/
[root@centos7-1 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
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=graphical.target
[root@centos7-1 system]# systemctl enable httpd.service
Created symlink from /etc/systemd/system/graphical.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@centos7-1 system]# systemctl is-enabled httpd
enabled
成功执行上述操作后,在日常维护过程中,可直接使用 apachectl 工具或 systemctl 命令控制 httpd 服务。
熟悉了 httpd 服务器的安装过程及主要目录结构之后,本节将进一步介绍使用 httpd 服务来架设 Web 站点的基本过程及常见配置。?
在 CentOS 7.3 系统中,使用 httpd 服务部署 Web 站点的基本过程分析如下。?
若要向 Internet 中发布一个 Web 站点,需要申请一个合法的互联网 IP 地址,并向 DNS 服务提供商注册一个完整的网站名称。在企业内部网络中,这些信息可以自行设 置。例如 Web 主机的 IP 地址为 192.168.23.201,网站名称为 www.kgc.com。?
若要在客户机的浏览器中通过地址 www.kgc.com 来访问此 Web 站点,还应该有可用的 DNS 域名服务。例如,客户机所使用的 DNS 服务器应能够将 www.kgc.com 解析为 IP 地址192.168.23.201。?
在 Web 服务器本机中,将 IP 地址设置为192.168.23.201;将主机名称设置为 www.kgc.com;并修改/etc/hosts 文件,添加相应的映射记录以提高本地解析速度。
[root@centos7-1 ~]# hostname www.kgc.com
[root@centos7-1 ~]# vim /etc/hostname
www.kgc.com
[root@centos7-1 ~]# vim /etc/hosts
192.168.23.201 www.kgc.com
编辑 httpd 服务的主配置文件 httpd.conf,查找配置项“ServerName”,在附近添加 一行内容“ServiceName www.kgc.com”,用于设置网站名称。?
[root@centos7-1 ~]# vim /usr/local/httpd/conf/httpd.conf
......//省略部分内容
ServerName www.kgc.com
......//省略部分内容
修改 httpd.conf 文件的配置内容后,建议使用带“-t”选项的 apachectl 命令对配置内 容进行语法检查(或使用“httpd-t”命令)。如果没有语法错误,将会显示“Syntax OK”的 信息,否则需要根据错误提示信息来修正配置。?
[root@centos7-1 ~]# httpd -t
Syntax OK
[root@centos7-1 ~]#
使用 systemctl 命令启动 httpd 服务。正常启动 httpd 服务以后,默认将监听 TCP 协议的 80 端口。?
[root@centos7-1 ~]# systemctl start httpd
[root@centos7-1 ~]# netstat -ntlp | grep httpd
tcp6 0 0 :::80 :::* LISTEN 26076/httpd
[root@centos7-1 ~]#
对于新编译安装的 httpd 服务,网站根目录位于/usr/local/httpd/htdocs 下,需要将 Web 站点的网页文档复制或上传到此目录下。httpd 服务器默认已提供了一个名为 index.html 的测试网页(可显示字串“It works!”),作为访问网站时的默认首页。?
[root@centos7-1 ~]# cat /usr/local/httpd/htdocs/index.html
<html><body><h1>It works!</h1></body></html>
在客户机的网页浏览器中,通过域名或 IP 地址访问 httpd 服务器,将可以看到 Web 站点的页面内容。若使用的是 httpd 服务默认的首页,则页面会显示“It works!”,表示 httpd 服务已经正常运作。?
httpd 服务器使用了两种类型的日志:访问日志和错误日志。这两种日志的文件名分别为 access_log 和 error_log,均位于/usr/local/httpd/logs 目录下?
通过查看访问日志文件 access_log,可以及时了解 Web 站点的访问情况。访问日志中的每一行对应一条访问记录,记录了客户机的 IP 地址、访问服务器的日期和时间、 请求的网页对象等信息。例如,当从客户机访问了192.168.23.201的?Web 站点以后,访问日志将会记录“192.168.23.201……"GET/HTTP/1.1"……”的消息。?
[root@centos7-1 ~]# tail /usr/local/httpd/logs/access_log
192.168.23.10 - - [03/Jan/2024:15:30:03 +0800] "GET /favicon.ico HTTP/1.1" 404 209
192.168.23.10 - - [03/Jan/2024:15:30:12 +0800] "GET / HTTP/1.1" 200 45
192.168.23.10 - - [03/Jan/2024:15:30:12 +0800] "GET /favicon.ico HTTP/1.1" 404 209
192.168.23.10 - - [03/Jan/2024:15:31:03 +0800] "-" 408 -
192.168.23.10 - - [03/Jan/2024:15:31:07 +0800] "GET / HTTP/1.1" 304 -
192.168.23.10 - - [03/Jan/2024:15:31:08 +0800] "GET / HTTP/1.1" 304 -
[root@centos7-1 ~]#
通过查看错误日志文件 error_log,可以为排查服务器运行故障提供参考依据。错误日志文件中的每一行对应一条错误记录,记录了发生错误的日期和时间、错误事件类型、 错误事件的内容描述等信息?
上述过程是使用 httpd 服务器部署并验证 Web 站点的基本步骤,其中涉及 httpd.conf 配置文件的改动量非常少,要搭建一台简单的 Web 服务器还是十分容易的。
若要对 Web 站点进行更加具体、更加强大的配置,仅仅学会添加“ServerName”配 置项显然是远远不够的,还需要进一步熟悉 httpd.conf 配置文件,了解其他各种常见的配置项。?
主配置文件 httpd.conf 由注释行、设置行两部分内容组成。与大多数 Linux 配置文 件一样,注释性的文字以“#”开始,包含了对相关配置内容进行的说明和解释。除了注释 行和空行以外的内容即设置行,构成了 Web 服务的有效配置。根据配置所作用的范围 不同,设置行又可分为全局配置、区域配置。?
全局配置决定 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 站点必需的子目录和文件。默认的根目录为/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 服务器中的相关帮助手册文档。?
除了全局配置项以外,httpd.conf 文件中的大多数配置是包括在区域中的。区域配置使用一对组合标记,限定了配置项的作用范围。例如,最常见的目录区域配置的形式如下所示。?
<Directory /> //定义"/"目录区域的开始
AllowOverride None //不允许隐含控制文件中的覆盖配置
Options FollowSymLinks //控制选项,允许使用符号链接
Require all denied //禁止任何人访问此区域
</Directory> //定义"/"目录区域的结束
?在以上区域定义中,设置了一个根目录的区域配置,其中添加的访问控制相关配置只对 httpd 服务的根目录有效,而不会作用于全局或其他目录区域。
虚拟 Web 主机指的是在同一台服务器中运行多个 Web 站点,其中每一个站点实际上并不独立占用整个服务器,因此被称为“虚拟”Web 主机。通过虚拟 Web 主机服务可 以充分利用服务器的硬件资源,从而大大降低网站构建及运行成本。?
使用 httpd 服务可以非常方便地构建虚拟主机服务器,只需要运行一个 httpd 服务 就能够同时支撑大量的 Web 站点。httpd 服务支持的虚拟主机类型包括以下三种。
在上述几种虚拟 Web 主机中,基于域名的虚拟主机是使用最为广泛的,也是本节介绍的重点内容。关于另外两种类型的虚拟主机,将只介绍其配置要点。另外,因不同类型的虚拟主机其区分机制各不相同,建议不要同时使用,以免相互混淆。?
本小节以实现两个虚拟 Web 主机 www.kgc.com 和 www.kcce.com 为例,使用一 台 httpd 服务器搭建,IP 地址为 192.168.23.201。具体构建过程介绍如下?
首先需要向 DNS 服务提供商注册各虚拟 Web 站点的域名,以便当访问其中任何一 个虚拟 Web 站点时,最终访问的都是同一个 IP 地址——实际支撑所有虚拟 Web 站点 的服务器的 IP 地址。?
在本小节的案例中,需要将两个虚拟 Web 主机 www.kgc.com 和 www.kcce.com 解析为同一个 IP 地址——192.168.23.201。而在实际的 httpd 服务器 192.168.23.201中,可以使用虚拟 Web 站点中的任何一个作为主机名称,如 www.kgc.com。?
实验过程中可以自行搭建测试用的 DNS 服务器。主配置文件 named.conf 中需要添加kgc.com和 kcce.com两个区域;各区域的地址数据库中均设置“www-->192.168.23.201”的A记录。确认客户机能够正确解析到 www.kgc.com 和 www.kcce.com 的地址。例如,若要在 IP 地址为 192.168.23.201的服务器中构建 BIND 服 务,具体配置方法就不赘了。
为每个虚拟 Web 主机准备网站目录及网页文档。为了测试方便,分别为每个虚拟 Web 主机提供包含不同内容的首页文件。例如,在/var/www/html 目录下创建两个子文 件夹 kgccom、kccecom,分别作为 www.kgc.com 和 www.kcce.com 的网站根目录, 并分别编写测试网页文件。?
[root@centos7-1 ~]# mkdir -p /var/www/html/kgccom
[root@centos7-1 ~]# mkdir -p /var/www/html/kccecom
[root@centos7-1 ~]# echo "<h1>www.kgc.com</h1>" > /var/www/html/kgccom/index.html
[root@centos7-1 ~]# echo "<h1>www.kcce.com</h1>" > /var/www/html/kccecom/index.html
在 httpd 服务器的主配置文件中,若要启用基于域名的虚拟 Web 主机,通常需要配置以下几个方面的内容。?
- 虚拟主机区域:使用……区域配置,为每一 个虚拟 Web 主机建立独立的配置内容。其中至少应包括虚拟主机的网站名称、网 页根目录的配置项;其他(如管理邮箱、访问日志等)配置项可根据实际需要添加。
- 目录权限:使用……区域配置,为每一个虚拟 Web 主机的网站目录设置访问权限,如允许任何人访问。目录访问可以继承其父目 录的授权许可,因此可以采取直接为父文件夹授权访问权限的方法来简化配置。?
当虚拟 Web 主机的数量较多时,建议使用独立的虚拟主机配置文件,然后在 httpd.conf 文件中通过 Include 加载这些配置。这样可以将对 httpd.conf 文件的改动减至最少,更方便配置内容的维护。
[root@centos7-1 ~]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf //创建独立的配置文件
<VirtualHost *:80> //设置 kgc 虚拟站点区
DocumentRoot "/var/www/html/kgccom"
ServerName www.kgc.com
ErrorLog "logs/www.kgc.com.error_log"
CustomLog "logs/www.kgc.com.access_log" common
<Directory "/var/www/html"> //设置目录访问权限
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:80> //设置 kcce 虚拟站点区
DocumentRoot "/var/www/html/kccecom"
ServerName www.kcce.com
ErrorLog "logs/www.kcce.com.error_log"
CustomLog "logs/www.kcce.com.access_log" common
<Directory "/var/www/html"> //设置目录访问权限
Require all granted
</Directory>
</VirtualHost>
[root@centos7-1 ~]# vim /usr/local/httpd/conf/httpd.conf
......//省略部分内容
Include conf/extra/httpd-vhosts.conf //加载独立的配置文件
[root@centos7-1 ~]# systemctl restart httpd //重启服务使新配置生效
在客户机的浏览器中,使用网站名称分别访问不同的虚拟 Web 主机,确认能够看到不同的网页内容,此时表示基于域名的虚拟主机配置成功。若无法看到此结果,则需 要检查两个站点的首页文件,根据上述过程排查配置错误,必要时清空浏览器缓存后重新访问。?
构建基于 IP 地址或基于端口的虚拟主机的过程与基于域名的虚拟主机类似,也需 要先提供域名解析、准备网页文档,再调整 httpd 配置、重启 httpd 服务,然后在客户 机中访问虚拟主机进行测试。其中最主要的区别是,不同类型的虚拟主机在 httpd.conf 文件中的配置内容略有不同。?
对于基于 IP 地址的虚拟主机,每个虚拟 Web 主机各自使用不同的 IP 地址,但是都通过同一台 httpd 服务器对外提供 Web 浏览服务。正因为如此,用来支撑这些虚拟 Web 主机的服务器也就需要有大量的网络接口,这在实际应用中往往不太方便,所以 基于 IP 地址的虚拟主机并不像基于域名虚拟主机那样应用广泛。?
配置基于 IP 地址的虚拟 Web 主机时,需要在每个虚拟 Web 主机的 VirtualHost 配置项中指定各自域名所对应的 IP 地址。例如,站点 www.kgc.com 的 IP 地址为 第?192.168.23.201,站点 www.kcce.com 的 IP 地址为 192.168.23.202,若要实现基于 IP 地址的虚拟 Web 主机,则可参考以下内容调整 httpd 服务器的配置。
[root@centos7-1 ~]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf //创建独立的配置文件
<VirtualHost 192.168.23.201:80> //设置 kgc 虚拟站点区
DocumentRoot "/var/www/html/kgccom"
ServerName www.kgc.com
......
</VirtualHost>
<VirtualHost 192.168.23.202:80> //设置 kcce 虚拟站点区
DocumentRoot "/var/www/html/kccecom"
ServerName www.kcce.com
......
</VirtualHost>
[root@centos7-1 ~]# vim /usr/local/httpd/conf/httpd.conf
......//省略部分内容
Include conf/extra/httpd-vhosts.conf //加载独立的配置文件
[root@centos7-1 ~]# systemctl restart httpd //重启服务使新配置生效
需要注意的是,在做基于 IP 地址的虚拟主机实验时,为了简化操作、方便测试, 各虚拟 Web 主机可以是同一个 DNS 区域的,使用的 IP 地址也可以是同一个网段的。 例如,两个虚拟主机 www.kgc.com 和 ftp.kgc.com,使用的 IP 地址分别为 192.168.23.201?和 192.168.23.202,这样可以减少 DNS 配置和网段调整的工作?。
基于端口的虚拟主机通常只用于同一个 Web 站点,其针对的网站名称、IP 地址往 往是相同的,但通过不同的 TCP 端口来提供访问不同网页内容的服务入口。在浏览器 中访问非 80 端口的 Web 服务器时,需要明确指出服务器的端口号,如访问 http://www.kgc.com:8353/。
配置基于端口的虚拟 Web 主机时,要通过多个 Listen 配置项来指定要监听的 TCP 端口号,每个虚拟 Web 主机的 VirtualHost 配置中应同时指定 IP 地址和端口号。
例如,若要实现当通过 80 端口访问 www.kcce.com 站点时,看到的是正常的 kcce 站点内容;而当通过 8353 端口来访问 www.kcce.com 站点时,可以看到 kcce 站点的 后台管理系统页面,则可参考以下内容调整 httpd 服务器的配置。
[root@centos7-1 ~]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf //创建独立的配置文件
<VirtualHost 192.168.23.201:80> //设置 kgc 虚拟站点区
DocumentRoot "/var/www/html/kgccom"
ServerName www.kgc.com
......
</VirtualHost>
<VirtualHost 192.168.23.201:8353> //设置 kcce 虚拟站点区
DocumentRoot "/var/www/html/kccecom"
ServerName www.kcce.com
......
</VirtualHost>
Listen:80 //监听端口80
Listen:8353 //监听端口8353
[root@centos7-1 ~]# vim /usr/local/httpd/conf/httpd.conf
......//省略部分内容
Include conf/extra/httpd-vhosts.conf //加载独立的配置文件
[root@centos7-1 ~]# systemctl restart httpd //重启服务使新配置生效
MySQL 是一个真正的多线程、多用户的 SQL 数据库服务,凭借其高性能、高可靠和易于使用的特性,成为服务器领域中最受欢迎的开源数据库系统。本节将介绍 MySQL 的编译安装过程、服务控制方法。
为了确保 MySQL数据库功能的完整性 、 可定制性 , 本小节将以mysql-5.6.36.tar.gz 为例使用源代码编译的方式安装 MySQL 数据库?。
为了避免发生端口冲突、程序冲突等现象,建议先查询 MySQL 软件的安装情况, 确认没有使用以 RPM 方式安装的 mysql-server、mysql、MariaDB 软件包;否则建议将其卸载。?
[root@centos7-1 ~]# rpm -q mysql-server mysql
未安装软件包 mysql-server
未安装软件包 mysql
[root@centos7-1 ~]# yum -y install ncurses-devel
由于 MySQL 5.5 需要 cmake 编译安装,所以先安装 cmake包。
[root@centos7-1 ~]# tar zxf cmake-2.8.6.tar.gz
[root@centos7-1 ~]# cd cmake-2.8.6/
[root@centos7-1 cmake-2.8.6]# ./configure
[root@centos7-1 cmake-2.8.6]# gmake && gmake install
为了加强数据库服务的权限控制,建议使用专门的运行用户,如 mysql。此用户不需要直接登录到系统,可以不创建宿主文件夹。?
[root@centos7-1 ~]# groupadd mysql
[root@centos7-1 ~]# useradd -M -s /sbin/nologin mysql -g mysql
将下载的 MySQL 源码包解压,释放到/usr/src 目录下,并切换到展开后的源码目录。?
[root@centos7-1 ~]# tar zxf mysql-5.6.36.tar.gz -C /usr/src/
[root@centos7-1 ~]# cd /usr/src/mysql-5.6.36/
[root@centos7-1 mysql-5.6.36]#
在内容丰富、结构庞大的企业网站平台中,可能会用到多种字符集的网页,相应地 数据库系统也应该支持不同的字符集编码。在配置过程中,可以将默认使用的字符集设 置为 utf8,并添加其他字符集的支持。
[root@centos7-1 mysql-5.6.36]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all
上述配置命令中,各选项的含义如下。
- -DCMAKE_INSTALL_PREFIX:指定将 MySQL 数据库程序安装到某目录下,如目 录/usr/local/mysql。
- -DSYSCONFDIR:指定初始化参数文件目录。
- -DDEFAULT_CHARSET:指定默认使用的字符集编码,如 utf8。
- -DDEFAULT_COLLATION:指定默认使用的字符集校对规则,utf8_general_ci 是 适用于 UTF-8 字符集的通用规则。
- -DWITH_EXTRA_CHARSETS:指定额外支持的其他字符集编码。?
[root@centos7-1 mysql-5.6.36]# make && make install
[root@centos7-1 mysql-5.6.36]# chown -R mysql:mysql /usr/local/mysql
[root@centos7-1 mysql-5.6.36]# rm -rf /etc/my.cnf
//如果原来etc文件夹下有my.cnf文件可以删除
[root@centos7-1 mysql-5.6.36]# cp support-files/my-default.cnf /etc/my.cnf
为了能够正常使用MySQL数据库系统,应以运行用户mysql的身份执行初始化脚本 mysql_install_db,指定数据存放目录等。
[root@centos7-1 mysql-5.6.36]# /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/
为了方便在任何目录下使用mysql命令,需要在/etc/profile设置环境变量。
[root@centos7-1 mysql-5.6.36]# echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
[root@centos7-1 mysql-5.6.36]# . /etc/profile //立即生效
MySQL源码包中提供的服务控制脚本,使用该脚本即可控制MySQL服务。找到support-files文件夹下的mysql.server脚本文件,将其复制到/etc/rc.d/init.d目录下,并改名为mysqld,然后再设置执行权限。
[root@centos7-1 mysql-5.6.36]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
[root@centos7-1 mysql-5.6.36]# chmod +x /etc/rc.d/init.d/mysqld
这样,以后就可以直接执行/etc/init.d/mysqld脚本来控制MySQL数据库服务了。例如,若要启动 mysqld服务,并查看其运行状态,可以执行以下操作。?
[root@centos7-1 mysql-5.6.36]# /etc/init.d/mysqld start
Starting MySQL.Logging to '/usr/local/mysql/data/www.kgc.com.err'.
SUCCESS!
[root@centos7-1 mysql-5.6.36]# /etc/init.d/mysqld status
SUCCESS! MySQL running (100034)
[root@centos7-1 mysql-5.6.36]# netstat -anpt | grep mysqld
tcp6 0 0 :::3306 :::* LISTEN 100034/mysqld
[root@centos7-1 mysql-5.6.36]#
MySQL服务器默认通过TCP3306端口提供服务。通过编辑/etc/my.cnf配置文件中[mysqld]配置段的“port = 3306”行,可以更改监听端口。
经过安装后的初始化过程,MySQL数据库的默认管理员用户名为“root”,密码为给定的随机密码。以root用户登录本机的MySQL数据库,可以执行以下操作。
[root@centos7-1 ~]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.36 Source distribution
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> set password=password('cisco@123');
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
[root@centos7-1 ~]# mysql -u root -pcisco@123
PHP即“Hypertext Preprocessor”(超级文本预处理语言的缩写,是一种服务器端的HTML嵌入式脚本语言。PHP的语法混合了 C、Java、Perl 及部分自创的新语法,拥有更好的网页执行速度,更重要的是 PHP 支持绝大多数流行的数据库,在数据库层 面的操作功能十分强大,而且能够支持 UNIX、Windows、Linux 等多种操作系统。
本节将介绍如何构建PHP运行环境,以实现LAMP协同架构。其前提条件是服务器中已经编译安装好 Apache HTTP Server 和 MySQL数据库。
PHP项目最初由Rasums Lerdorf在1994年创建,1995年发布第一个版本PHP1.0。本小节将以稳定版源码包php-5.5.38.tar.gz为例。该版本可以从PHP官方站点http://www.php.net下载。?
下面介绍编译安装 PHP相关软件包的基本过程。
为了避免发生程序冲突等现象,建议先将RPM方式安装的PHP及相关依赖包(如果已存在)卸载。例如,根据实际安装情况可卸载 php、php-cli、php-ldap、php-common、 php-mysql 等。另外,需要从光盘中安装 zlib-devel、libxml2-devel 等依赖包。
[root@centos7-1 ~]# rpm -e php php-cli php-ldap php-common php-mysql --nodeps
错误:未安装软件包 php
错误:未安装软件包 php-cli
错误:未安装软件包 php-ldap
错误:未安装软件包 php-common
错误:未安装软件包 php-mysql
[root@centos7-1 ~]# cd /mnt/Packages/
[root@centos7-1 Packages]# rpm -ivh zlib-devel-1.2.7-18.el7.x86_64.rpm libxml2-devel-2.9.1-6.el7_2.3.x86_64.rpm xz-devel-5.2.2-1.el7.x86_64.rpm
在实际企业应用中,一部分基于PHP开发的Web应用系统会需要额外的扩展工具, 如数据加密工具 libmcrypt、mhash、mcrypt 等(可以从站点 http://sourceforge.net 下载)。安装 php 软件包之前,应先安装好这些扩展工具程序。?
[root@centos7-1 ~]# tar zxf libmcrypt-2.5.8.tar.gz -C /usr/src/
[root@centos7-1 ~]# cd /usr/src/libmcrypt-2.5.8/
[root@centos7-1 libmcrypt-2.5.8]# ./configure
[root@centos7-1 libmcrypt-2.5.8]# make && make install
[root@centos7-1 libmcrypt-2.5.8]# ln -s /usr/local/lib/libmcrypt.* /usr/lib/
[root@centos7-1 ~]# tar zxf mhash-0.9.9.9.tar.gz -C /usr/src/
[root@centos7-1 ~]# cd /usr/src/mhash-0.9.9.9/
[root@centos7-1 mhash-0.9.9.9]# ./configure
[root@centos7-1 mhash-0.9.9.9]# make && make install
[root@centos7-1 mhash-0.9.9.9]# ln -s /usr/local/lib/libmhash* /usr/lib
[root@centos7-1 ~]# tar zxf mcrypt-2.6.8.tar.gz -C /usr/src/
[root@centos7-1 ~]# cd /usr/src/mcrypt-2.6.8/
[root@centos7-1 mcrypt-2.6.8]# ./configure
[root@centos7-1 mcrypt-2.6.8]# export LD_LIBRARY_PATH=/usr/local/lib //解决configure配置报错
[root@centos7-1 mcrypt-2.6.8]# ./configure
[root@centos7-1 mcrypt-2.6.8]# make && make install
将下载获得的PHP源码包解压并释放到/usr/src目录下,切换到展开后的源码目录。?
[root@centos7-1 ~]# tar zxf php-5.5.38.tar.gz -C /usr/src/
[root@centos7-1 ~]# cd /usr/src/php-5.5.38/
[root@centos7-1 php-5.5.38]#
在定制PHP的配置选项时,最关键的是要指定httpd、mysqld的安装路径,以便添加相关支持设置,使LAMP各组件协同工作。除此之外,还可以指定安装路径,启用多字节支持、加密扩展支持等。?
[root@centos7-1 php-5.5.38]# ./configure --prefix=/usr/local/php5 \
> --with-mcrypt \
> --with-apxs2=/usr/local/httpd/bin/apxs \
> --with-mysql=/usr/local/mysql \
> --with-mysqli=/usr/local/mysql/bin/mysql_config \
> --with-config-file-path=/usr/local/php5 \
> --enable-mbstring
上述配置命令中,各选项的含义如下。
- --prefix:指定将 PHP 程序安装到哪个目录下,如/usr/local/php5。
- --with-mcrypt:加载数据加密等扩展工具支持。
- --with-apxs2:设置 Apache HTTP Server 提供的 apxs 模块支持程序的文件位置。
- ?--with-mysql:设置 MySQL 数据库服务程序的安装位置。
- --with-mysqli:添加 MySQL 扩展支持。
- --with-config-file-path:设置 PHP 的配置文件 php.ini 将要存放的位置。
- --enable-mbstring:启用多字节字符串功能,以便支持中文等代码。
[root@centos7-1 php-5.5.38]# make && make install
编译的过程可能会需要较长时间,需耐心等待。若期间未出现错误,那么 PHP 程 序的安装过程就基本完成了。接下来需要对 LAMP 组件环境进行适当的配置,并验证是否能够协同工作。?
设置LAMP组件环境,主要包括对PHP的配置文件php.ini、Apache的配置文件httpd.conf的调整。前者用来确定PHP的运行参数,后者用来加载libphp5.so模块, 以便支持PHP网页。?
安装好PHP软件包以后,服务器并不会自动创建php.ini配置文件,但在源码目录下提供了两个样例配置文件,分别对应于开发环境、生产环境。
/usr/src/php-5.5.38/php.ini-development //开发版样例文件,用于学习、测试
/usr/src/php-5.5.38/php.ini-production //生产版样例文件,用于实际运营
选择其中一个样例文件,并复制到PHP的配置文件目录/usr/local/php5下,并改名为php.ini。在 php.ini 配置文件中,以分号开头的内容表示注释信息。?
[root@centos7-1 ~]# cp /usr/src/php-5.5.38/php.ini-development /usr/local/php5/php.ini
[root@centos7-1 ~]# grep -v "^;" /usr/local/php5/php.ini | grep -v "^$"
[PHP]
engine = On
short_open_tag = Off
asp_tags = Off
precision = 14
output_buffering = 4096
zlib.output_compression = Off
......//省略部分内容
通过修改php.ini文件中的配置内容,可以控制PHP网页的执行特性,如是否允许用户上传文件、设置上传文件的大小限制、设置默认使用的字符集、加载额外的扩展模块等。如果没有特别要求,可以直接沿用默认配置,不做任何修改。?
[root@centos7-1 ~]# vim /usr/local/php5/php.ini
[PHP]
default_charset = "utf-8" //设置默认字符集为utf-8
file_uploads = On //允许通过PHP网页上传文件
upload_max_filesize = 2M //允许上传的文件大小限制
max_file_uploads = 20 //个HTTP最多允许请求上传的文件数
post_max_size = 8M //每次通过表单post提交的数据量限制
short_open_tag = On //允许识别PHP短语法标记,即<?......?>
extension=php_mysqli.dll //添加MySQL支持
//添加以上内容
添加ZendGuardLoader优化模块?
为了进一步提高 PHP 程序的执行效率,优化页面加载速度,可以为 PHP 添加 Zend 公司开发的ZendGuardLoader优化模块。若需要加密PHP代码以限制未经授权的分发, 还可以购买该公司的 ZendGuard 软件。添加 ZendGuardLoader 模块支持的过程如下所述。
首先将下载的 ZendGuardLoader 包释放,并将其中 php-5.3.x 目录下的模块文件复制到 PHP。
[root@centos7-1 ~]# tar zxf zend-loader-php5.5-linux-x86_64_update1.tar.gz -C /usr/src/
[root@centos7-1 ~]# cd /usr/src/zend-loader-php5.5-linux-x86_64/
[root@centos7-1 zend-loader-php5.5-linux-x86_64]# cp ZendGuardLoader.so /usr/local/php5/php
然后,修改 php.ini 配置文件,添加及启用 ZendGuardLoader.so 模块的配置语句。
[root@centos7-1 ~]# vim /usr/local/php5/php.ini
......//省略部分内容
zend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so
zend_loader.enable=1
//添加以上内容
要使httpd服务器支持PHP页面解析功能,需通过LoadModule配置项加载PHP程序的模块文件,并通过AddType配置项添加对“.php”类型网页文件的支持。除此以外,还应修改DirectoryIndex配置行,添加index.php配置项,以识别常见的PHP首页文件。
[root@www ~]# vim /usr/local/httpd/conf/httpd.conf
......//省略部分内容
Listen *:80
......//省略部分内容
<IfModule dir_module>
DirectoryIndex index.html index.php //修改此行
</IfModule>
AddType application/x-httpd-php .php //添加此行
# Include conf/extra/httpd-vhosts.conf //注释此行
[root@www ~]# httpd -t
Syntax OK
[root@www ~]# systemctl restart httpd
在上述配置内容中,LoadModule行应该会在安装PHP的过程中自动添加,其中的“php5_module”表示模块名称;“modules/libphp5.so”表示模块文件位置。而AddType行需要手动添加,DirectoryIndex 行在原有基础上对其进行修改即可。?
完成PHP相关软件的安装、调整配置以后,应对其进行必要的功能测试,以验证LAMP平台各组件是否能够协同运作。在网站根目录下创建相应的PHP测试网页,然后通过浏览器进行访问,根据显示结果即可判断LAMP平台是否构建成功。
下面分别从PHP网页的解析、通过PHP页面访问MySQL数据库两个方面进行测试。?
要想测试PHP环境是否能够正常工作,需要建立一个使用PHP语言编写的网页文件,并通过httpd 服务器发布,在浏览器中对其进行访问。由于PHP语言并非本章学习的重点,这里不做过多的讲解。用于测试时,只需要建立一个简短的PHP测试文件即可。
编写一个“.php”格式的网页测试文件,使用 PHP 内建的“phpinfo()”函数显示服务器的 PHP 环境信息,PHP 代码应包括在“”标记之间。将测试网页文件放置到网站根目录下,如/usr/local/httpd/htdocs/test1.php。 ?
[root@www ~]# vim /usr/local/httpd/htdocs/test1.php
<?php
phpinfo();
?>
通过浏览器访问测试网页,如 http://www.kgc.com/test1.php。若能够看到 PHP 程序的版本号、配置命令、运行变量等相关信息,如下图所示,则表示此Web服务器已经能正常显示PHP网页;若还能看到 Zend引擎相关信息,则表示 ZendGuardLoader 模块也已成功启用。
PHP 网页能够正确显示?
编写一个网页测试文件test2.php,添加简单的数据库操作命令,用于验证与MySQL 服务器的连接、查询等操作。其中,“mysqli_connect()”函数用于连接 MySQL 数据库,需要指定目标主机地址,以及授权访问的用户名、密码。?
[root@www ~]# vim /usr/local/httpd/htdocs/test2.php
<?php
$link=mysqli_connect('localhost','root','cisco@123'); //连接MySQL数据库,第二格=个值表示用户,第三个值表示用户密码,没密码则''
if($link) echo "恭喜您,数据库连接成功啦!!!"; //连接成功时的反馈消息
mysqli_close($link); //关闭数据库连接
?>
通过浏览器访问测试网页,如 http://www.kgc.com/test2.php。若能看到成功连接的提示信息,则表示能够通过 PHP 网页访问 MySQL 数据库。当使用了错误的用户名、 密码,或者因“mysqld-connect()”函数未运行而导致连接失败时,执行时将会报错。?
数据库访问成功的信息?
在企业Web应用系统中,动态网站已经逐步成为主流,而基于LAMP架构的Web动态网站更是其中的佼佼者。本节将介绍一个LAMP架构协同应用的实例--phpMyAdmin管理套件的部署及使用。
phpMyAdmin是一个使用PHP语言编写,用来管理MySQL数据库的Web应用系统。通过该套件提供的网页界面,即便是对SQL语句不太熟悉的人,也能够非常容易地对MySQL数据库进行管理和维护?。
phpMyAdmin 的源码包可以从其官方站点 http://www.phpmyadmin.net 下载。下面以多国语言版源码包 phpMyAdmin-4.7.2-all-languages.tar.gz 为例,介绍 phpMyAdmin 套件的部署过程。
对于大部分PHP应用系统,只需要解包后复制到网站目录下即可完成部署,之后再根据需要调整配置,或者访问安装页面以完成进一步的安装。例如,若要将phpMyAdmin套件部署到网站根目录下 ,以便通过站点http://www.kgc.com/phpMyAdmin/访问。
[root@www ~]# tar zxf phpMyAdmin-4.7.2-all-languages.tar.gz
[root@www ~]# mv phpMyAdmin-4.7.2-all-languages /usr/local/httpd/htdocs/phpMyAdmin
(2)建立配置文件 config.inc.php?
将 phpMyAdmin 套件复制到网站目录以后,还需要创建配置文件方可正常使用。 默认提供的样例配置文件为config.sample.inc.php , 需参照该文件内容建立configi.inc.php配置文件。查找配置文件中的“blowfish_secret”行,默认已经设置了一个 短语密钥(此密钥用于网页 cookie 认证,不需要用户记忆),可以根据需要自行修改。?
[root@www ~]# cd /usr/local/httpd/htdocs/phpMyAdmin/
[root@www phpMyAdmin]# cp config.sample.inc.php config.inc.php
在浏览器中访问 http://www.kgc.com/phpMyAdmin/,如果能够看到phpMyAdmin系统的登录界面,如下图所示,则表示部署成功。使用 MySQL 数据库的用户(不能是密码为空的用户)登录后,即可在授权范围内对数据库进行管理。?
?phpMyAdmin 的登录界面
需要使用phpMyAdmin系统时,应先通过MySQL服务器中授权的数据库用户(如root用户)进行登录,认证成功后可以看到管理界面,如下图所示。通过 phpMyAdmin 套件,用户可以在授权的范围内执行各种数据库管理操作,使界面更加直观、友好,大大降低了远程维护 MySQL 数据库服务器的难度。?
phpMyAdmin 的管理界面?
管理页面的初始界面是一个典型的分栏结构,左侧部分包括一排导航按钮(主页、退出、查询、帮助、SQL 文档)、库列表;右侧部分是主体窗口,其中显示了若干标签、操作面板、界面控制等组件,以及 MySQL、网站服务器、phpMyAdmin 的版本信息。
下面仅简单介绍 phpMyAdmin 系统中几个常见的数据库操作,更多的操作方法需要大家自行去探索和实践。?
若要创建新的库,可以选择右侧的“数据库”标签,然后在下方的“新建数据库”区域进行操作,如下图所示。例如,指定新建的库名称为“kgc”,使用的校对规则选择 utf8_general_ci,然后单击“创建”按钮即可新建 kgc 库。
?返回管理界面主页,选择左侧列表中新建的 kgc 库,在右侧的“结构”标签页下方,可以输入新的表名、字段数,单击“执行”按钮;然后根据页面内容设置各字段的名称、 类型(对于要包含中文数据的字段,类型应选用“文本”栏下的 CHAR、VCHAR 等)、长 度等要素后,单击“保存”按钮即可新建指定的表。
选中指定库中的表,可以分别进行浏览数据、修改表结构、搜索数据、插入数据等操作。
值得注意的是,如果数据库、表中需要记录包含中文的数据,应确保LAMP平台各组件使用相同的字符集(如 UTF-8),否则可能会出现乱码的情况。在编码一致的前提下,新建数据库、表,以及插入、浏览记录时,都可以正常使用中文。?
单击右侧的“SQL”标签 ,可以打开SQL查询窗口。在该窗口中,可以直接输入MySQL操作语句,并通过单击右下方的“执行”按钮来完成相应的管理任务。?