一、Apache 简介及主要特点
“Apache HTTP Server”是开源软件项目,基于标准的 HTTP 网络协议提供的网页浏览服务,可运行在 Linux、UNIX、Windows 等多种操作系统平台。其 Apache 的官方网站如下;
二、安装 httpd 服务器
配置 Apache 网站服务前,需正确安装好 httpd 服务器软件。其安装方式可以用 RPM 包的方式或源码编译安装的方式来进行安装,RPM 包安装起来比较简单快速,在功能上有一定的局限性。那么在实际生产环境中,使用源码编译安装的方式更普遍些。
为避免发生端口冲突等现象,建议卸载使用 RPM 方式安装的 httpd 服务。
# rpm -e httpd --nodeps
复制代码
将下载的 httpd 源码包进行解压并释放到目录 /usr/src 下,并进入到解压后的源码包目录下。
# tar zxf httpd-2.2.17.tar.gz -C /usr/src
# cd /usr/src/httpd-2.2.17/
复制代码
配置可根据服务器的实际应用需要,设置不同的定制选项,比如:安装路径、启用动态加载模块支持等选项,若要获取其他可用的配置选项及其含义,可执行 "./configure --help" 命令即可查询。
通过下述配置命令中,所包含的各选项的含义如下:
- --prefix:指定将 httpd 服务程序安装到哪个目录;
- --enable-so:启用动态加载模块支持,其 httpd 具备进一步的扩展能力;
- --enable-rewrite:启用网页地址重写功能,其用于网站优化及目录迁移;
- --enable-charset-lite:启动字符集支持,其支持使用各种字符集编码的网页;
- --enable-cgi:启用 CGI 脚本程序支持,便于扩展网站的应用访问能力;
# ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi
复制代码
完成以上配置后,方可执行命令 "make" 来进行编译,将源代码转换为可执行程序,然后执行命令 "make install" 来完成最后的安装,在这里我们可以将两条命令结合为一条命令来执行 "make && make install" 编译的过程中需花费较长的时间,需耐心等待。
# make && make install
复制代码
在配置的过程中,我们将 "--prefix" 的选项来进行制定,那么编译好的 httpd 程序及文件目录等相关文件复制到所配置的安装目录下 /usr/local/httpd ,因此我们可以在该目录下进行确认安装结果是否成功;
安装好的目录下,会有一些子目录将主要目录各用途简单介绍:
- bin:存放 httpd 服务的各种执行程序文件,主要包括主程序 httpd 等;
- cgi-bin:存放各种 CGI 程序文件;
- conf:存放 httpd 服务的各种配置文件,主要包括主配置文件 httpd.conf 等;
- htdocs:存放网页文档,其默认网页文件为:index.html
- logs:存放 httpd 服务的日志文件;
- modules:存放 httpd 服务的各种模块文件;
# ls /usr/local/httpd
bin build cgi-bin conf error htdocs icons include lib logs man manual modules
复制代码
因为本次安装我们通过源码编译的方式来安装的 httpd 服务,因此程序路径并不在默认的搜索路径中,可为程序添加符号链接;
# ln -s /usr/local/httpd/bin/* /usr/local/bin/
# ls -l /usr/local/bin/httpd /usr/local/bin/apachectl
lrwxrwxrwx. 1 root root 30 7月 27 06:54 /usr/local/bin/apachectl -> /usr/local/httpd/bin/apachectl
lrwxrwxrwx. 1 root root 26 7月 27 06:54 /usr/local/bin/httpd -> /usr/local/httpd/bin/httpd
复制代码
可执行命令 "httpd -v" 来查看程序版本;
# httpd -v
Server version: Apache/2.2.17 (Unix)
Server built: Jul 27 2019 06:48:56
复制代码
将 httpd 添加为系统服务,可通过命令 chkconfig 来进行管理。可将 apachectl 脚本复制为 /etc/init.d/httpd,并在文件的开头进行添加级别的 chkconfig 配置及相关描述信息;每当 Linux 系统进入 3、5 运行级别下时,httpd 服务将自动运行,那么在今后日常的维护下,可使用 apachectl 工具来进行控制 httpd 服务,同时也可以使用 /etc/init.d/httpd 脚本来进行控制;
当执行命令 "/etc/init.d/httpd start" 启动时,同样也可以执行命令 "/usr/local/httpd/bin/apachectl start" 来启动 httpd 服务;
# cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
# vi /etc/init.d/httpd
#!/bin/sh
# chkconfig:35 66 88 # 服务设别参数,在级别 3、5 中启动;启动和关闭的顺序分别为:85、21
# description:http apache # 服务描述信息
...... //省略部分内容
复制代码
将 httpd 添加为系统服务,并查看 httpd 服务的自启动状态;
# chkconfig --add httpd # 将 httpd 添加为系统服务
# chkconfig --list httpd # 查看 httpd 服务的自启动状态
httpd 0:关闭 1:关闭 2:关闭 3:启用 4:启用 5:启用 6:关闭
复制代码
三、httpd 服务的基本配置
确认 IP 地址及网站名称
# vi /etc/hosts
192.168.3.123 www.jacktiangjwan.com
复制代码
配置 httpd 服务
编辑 httpd 服务的主配置文件 httpd.conf,在该配置文件中找到配置项 "ServerName",在原有的基础上进行修改配置或在添加一行配置 "ServerName www.jacktiangjwan.com" 用于设置网站名称。
# vi /usr/local/httpd/conf/httpd.conf
...... //省略部分内容
ServerName www.jacktian.com
...... //省略部分内容
复制代码
修改完 httpd.conf 配置文件后,可使用命令 apachectl 结合 "-t" 选项对配置内容进行检查是否有误,如果显示 "Syntax OK" 的返回值时,则说明无误,若显示其他输出时,则需要根据相应的错误信息来进行修改配置;
# /usr/local/httpd/bin/apachectl -t
Syntax OK
复制代码
启动 httpd 服务
使用脚本文件 /usr/local/httpd/bin/apachectl 或 /etc/init.d/httpd,通过 start、stop、restart 选项来进行控制,用来启动、停止、重启该服务,且启动 httpd 服务后,默认监听 TCP 的端口号为:80
# /etc/init.d/httpd start
# netstat -anpt | grep httpd
tcp 0 0 :::80 :::* LISTEN 55498/httpd
复制代码
部署网页文档
新编译安装的 httpd 服务,网站根目录在 /usr/local/httpd/htdocs 下,默认是已经提供了一个名为 index.html 的文件,同时你也可以将该文件中的内容进行修改为自己所想要显示出的内容来作为访问网站的默认网页。
# cat /usr/local/httpd/htdocs/index.html
<html><body><h1>Hello World!</h1></body></html>
复制代码
验证 Web 站点
在客户端中打开浏览器,在地址栏中输入域名或 IP 地址来访问 httpd 服务,将可以看到 Web 站点的页面内容。
查看 Web 站点的访问情况
httpd 服务使用了两种类型日志:访问日志和错误日志,文件名分别为:access_log 和 error_log,均位于 /usr/local/httpd/logs 目录下。
查看访问日志文件,可及时了解 Web 站点的访问情况。
访问日志中的每一行对应一条访问记录,其主要包括:客户端的 IP 地址,访问服务器的日期、时间,请求的网页对象等信息;
# tail /usr/local/httpd/logs/access_log
192.168.3.124 - - [27/Jul/2019:07:22:57 +0800] "GET / HTTP/1.1" 200 44
192.168.3.124 - - [27/Jul/2019:07:22:57 +0800] "GET /favicon.ico HTTP/1.1" 404 209
192.168.3.124 - - [27/Jul/2019:07:22:57 +0800] "GET /favicon.ico HTTP/1.1" 404 209
192.168.3.124 - - [27/Jul/2019:07:24:14 +0800] "GET / HTTP/1.1" 200 48
复制代码
查看错误日志文件,可排查服务器运行故障所提供的参考信息。
错误日志中的每一行对应一条错误记录,其主要包括:发生错误的日期、时间,错误事件类型,错误事件的内容描述等信息;
# tail /usr/local/httpd/logs/error_log
[Sat Jul 27 07:07:08 2019] [notice] Apache/2.2.17 (Unix) configured -- resuming normal operations
[Sat Jul 27 07:17:28 2019] [notice] SIGHUP received. Attempting to restart
[Sat Jul 27 07:17:28 2019] [notice] Apache/2.2.17 (Unix) configured -- resuming normal operations
[Sat Jul 27 07:22:57 2019] [error] [client 192.168.3.124] File does not exist: /usr/local/httpd/htdocs/favicon.ico
[Sat Jul 27 07:22:57 2019] [error] [client 192.168.3.124] File does not exist: /usr/local/httpd/htdocs/favicon.ico
复制代码
四、httpd.conf 配置文件
全局配置项
主配置文件 httpd.conf 与大多数 Linux 配置文件相似,注释行以 "#" 开始,其包含了对相对配置内容进行的说明和解释。除注释行及空行外,其他内容均为 Web 服务的有效配置,根据配置所起的作用不同,以下为 httpd.conf 文件中最常用的一些全局配置项。
主配置文件 httpd.conf 由注释行、设置行内容组成;
设置行分为:全局配置 和 区域配置;
ServerRoot "/usr/local/httpd" # 设置 httpd 服务器的根目录,默认根目录为:/usr/local/httpd
Listen 80 # 设置 httpd 服务器监听的网络端口号,默认端口号为:80
User daemon # User:设置运行 httpd 进程时的用户身份,默认为:daemon
Group daemon # Group:设置运行 httpd 进程时的组身份,默认为:daemon
ServerAdmin you@example.com # 设置 httpd 服务器的管理员 email 地址
ServerName www.jacktiangjwan.com # 设置 web 站点的完整主机名;(主机名+域名)
DocumentRoot "/usr/local/httpd/htdocs" # 设置 网站 的根目录,即网页文档在系统中的实际存放路径
DirectoryIndex index.html # 设置 网站 的默认首页,可设置多个首页文件,空格分开,默认文件为:index.html
ErrorLog "logs/error_log" # 设置 错误日志文件 的路径,默认路径为:logs/error_log
LogLevel warn # 设置 记录日志 的级别,默认级别为:warn(警告)
CustomLog "logs/access_log" common # 设置 访问日志文件 的路径、日志类型,默认路径为:logs/access_log
PidFile logs/httpd.pid # 设置用于保存 httpd 进程号的文件,默认保存地址为:logs/httpd.pid
CharsetDefault UTF-8 # 设置站点中的网页默认使用的字符集编码,UTF-8
Include conf/extra/httpd-default.conf # 包含另一个配置文件的内容
复制代码
区域配置项
区域配置使用一对组合标记,限定了配置项的作用范围。
以下为最常见的目录区域配置;
<Directory /> # 定义 “/” 目录区域的开始
Options FollowSymLinks # 控制选项,允许使用符号链接
AllowOverride None # 不允许隐含控制文件中的覆盖配置
Order deny,allow # 访问控制策略的应用顺序
Deny from all # 禁止任何人访问此区域
</Directory> # 定义 “/” 目录区域的结束