一、介绍
1.1、介绍
ApacheHTTP服务器项目致力于为包括UNIX和Windows在内的现代操作系统开发和维护一个开源HTTP服务器。该项目的目标是提供一个安全、高效和可扩展的服务器,该服务器提供与当前HTTP标准同步的HTTP服务。 ApacheHTTP服务器(“httpd”)于1995年推出,自1996年4月以来,它一直是互联网上最流行的web服务器。它在2020年2月作为一个项目庆祝了它的25岁生日。 Apache HTTP服务器是Apache软件基金会的一个项目。
1.2、官方网站
该项目官方站点为 Welcome! - The Apache HTTP Server Project 该软件下载页面为 Download - The Apache HTTP Server Project
1.3、相关知识点
如果您完全不熟悉ApacheHTTP服务器,甚至根本不熟悉运行网站,那么您可能不知道从哪里开始,或者不知道要问什么问题。下面了解基本知识。
1.3.1、客户端、服务器和URLs
Web上的地址用URL(统一资源定位器)表示,URL指定协议(如http)、服务器名(如www.apache.org)、URL路径(如./docs/current/getting started.html)以及用于向服务器传递附加参数的查询字符串(如?arg=value)。 客户端(例如,web浏览器)使用指定的协议连接到服务器(例如,您的Apache HTTP服务器),并使用URL路径请求资源。URL路径可以表示服务器上的任意数量的内容。它可能是一个文件(比如getting-started.html)、一个处理程序(比如server-status)或某种程序文件(比如index.php)。 服务器将发送一个由状态代码和响应正文(可选)组成的响应。状态代码指示请求是否成功,如果不成功,则指示存在何种错误情况。这会告诉客户机应该如何处理响应。事务的详细信息和任何错误条件都会写入日志文件。
1.3.2、主机名和DNS
为了连接到服务器,客户端首先必须将服务器名解析为IP地址—服务器所在的Internet上的位置。 因此,为了使您的web服务器可以访问,服务器名必须在DNS中。多个主机名可能指向同一IP地址,并且可以将多个IP地址连接到同一物理服务器。因此,您可以使用称为虚拟主机的功能在同一物理服务器上运行多个网站。 如果您正在测试无法通过Internet访问的服务器,则可以将主机名放入hosts文件中,以便进行本地解析。例如,出于测试目的,您可能希望在主机文件中放置一条记录,以将www.example.com的请求映射到本地系统。此条目看起来像:127.0.0.1 www.example.com 主机文件可能位于/etc/hosts或C:\Windows\system32\drivers\etc\hosts。
1.3.3、配置文件和指令
Apache HTTP服务器是通过简单的文本文件配置的。这些文件可能位于不同的位置,具体取决于服务器的安装方式。这些文件的公共位置如下所示: ServerRoot :: /etc/httpd Primary Config Fle :: /etc/httpd/conf/httpd.conf Other Config Files :: /etc/httpd/conf.d Module Locations :: /usr/lib/httpd/modules DocumentRoot :: /var/www/html ErrorLog :: /var/log/httpd/error_log AccessLog :: /var/log/httpd/access_log cgi-bin :: /var/www/cgi-bin (empty and disabled by default) binary :: /usr/sbin/httpd runtime directory :: /etc/httpd/run 如果从源代码处安装了httpd,那么配置文件的默认位置是/usr/local/apache2/conf,如下所示。 ServerRoot :: /usr/local/apache2 DocumentRoot :: /usr/local/apache2/htdocs Apache Config File :: /usr/local/apache2/conf/httpd.conf Other Config Files :: /usr/local/apache2/conf/extra/ SSL Config File :: /usr/local/apache2/conf/extra/httpd-ssl.conf ErrorLog :: /usr/local/apache2/logs/error_log AccessLog :: /usr/local/apache2/logs/access_log cgi-bin :: /usr/local/apache2/cgi-bin (enabled by default, but some of the bundled scripts are 644) binaries (apachectl) :: /usr/local/apache2/bin
默认配置文件通常称为httpd.conf。这在服务器的第三方发行版中也可能有所不同。 为了便于管理,配置经常被分解为多个较小的文件。这些文件通过Include指令加载。这些子文件的名称或位置并不神奇,在不同的安装中可能会有很大的差异。按照您认为最合理的方式排列和细分这些文件。如果默认情况下的文件安排对您没有意义,请随意重新安排。 通过在这些配置文件中放置配置指令来配置服务器。directive 是一个关键字,后跟一个或多个设置其值的参数。如果是全局设置,则应显示在配置文件中任何、、或其他部分之外。如果它只应用于一个特定的目录,那么它应该进入引用该目录的部分,依此类推。
1.3.4、web站点内容
网站内容可以有许多不同的形式,但可以大致分为静态内容和动态内容。 静态内容是指HTML文件、图像文件、CSS文件以及文件系统中的其他文件。DocumentRoot指令指定您应该将这些文件放在文件系统中的什么位置。此指令可以全局设置,也可以按虚拟主机设置。查看您的配置文件以确定如何为您的服务器设置。 通常,当请求目录而未指定文件名时,将提供名为index.html的文档。例如,如果DocumentRoot设置为/var/www/html,并且请求http://www.example.com/work/,文件/var/www/html/work/index.html将提供给客户端。 动态内容是在请求时生成的任何内容,可以从一个请求更改为另一个请求。有许多方法可以生成动态内容。可以使用各种处理程序生成内容。可以编写CGI程序为您的站点生成内容。 第三方模块(如mod_php)可用于编写执行各种操作的代码。许多使用各种语言和工具编写的第三方应用程序都可以下载并安装在Apache HTTP服务器上。
1.3.5、日志文件和故障排除
作为Apache HTTP服务器管理员,您最宝贵的资产是日志文件,尤其是错误日志。在没有错误日志 的情况下排除任何问题就像闭着眼睛开车一样。 错误日志的位置由ErrorLog指令定义,该指令可以全局设置,也可以每个虚拟主机设置。错误日志中的条目会告诉您出了什么问题以及何时出了问题。他们还经常告诉你如何修复它。每个错误日志消息都包含一个错误代码,您可以在线搜索该代码,以获取有关如何解决问题的更详细描述。您还可以将错误日志配置为包含日志ID,然后可以将该ID与访问日志条目关联,以便确定导致错误情况的请求。
二、安装部署
2.1、环境说明及安装
本文档实验环境为:
[root@kittod ~]# cat /etc/redhat-release
Red Hat Enterprise Linux release 8.3 (Ootpa)
安装httpd软件
[root@kittod ~]# dnf install httpd -y
2.2、配置文件和语法
ApacheHTTP服务器是通过在纯文本配置文件中放置指令来配置的。主配置文件通常称为httpd.conf。此文件的位置在编译时设置,但可以使用-f命令行标志覆盖。此外,可以使用Include指令添加其他配置文件,并且可以使用通配符包含许多配置文件。任何指令都可以放在这些配置文件中。只有在httpd启动或重新启动时,才会识别对主配置文件的更改。 服务器还读取包含mime文档类型的文件;文件名由TypesConfig指令设置,默认为mime.types。 httpd配置文件每行包含一个指令。反斜杠""可用作行上的最后一个字符,以指示指令继续到下一行。反斜杠和行尾之间不得有其他字符或空格。 指令的参数用空格分隔。如果参数包含空格,则必须将该参数括在引号中。 配置文件中的指令不区分大小写,但指令的参数通常区分大小写。以散列字符“#”开头的行被视为注释,将被忽略。注释不能与配置指令包含在同一行中。忽略指令之前出现的空白,因此为了清晰起见,可以缩进指令。空白行也将被忽略。 可以在配置文件行中使用语法${VAR}使用Define of或shell环境变量定义的变量值。如果“VAR”是有效变量的名称,则该变量的值将被替换到配置文件行中的该点中,并且处理将继续,就好像该文本直接在配置文件中找到一样。使用Define定义的变量优先于shell环境变量。如果未找到“VAR”变量,则字符 ${VAR}保持不变,并记录警告。变量名不能包含冒号“:”字符,以避免与RewriteMap的语法冲突。只有在服务器启动之前定义的shell环境变量才能在扩展中使用。配置文件本身中定义的环境变量(例如SetEnv)生效太晚,无法用于配置文件中的扩展。 在正常配置文件中,变量替换和连接任何连续行后,行的最大长度约为16 MiB。在.htaccess文件中,最大长度为8190个字符。 可以使用apachectl configtest或-t命令行选项检查配置文件中的语法错误,而无需启动服务器。 可以使用mod_info的-DDUMP_CONFIG转储配置,解析所有包含的文件和环境变量,删除所有注释和不匹配的和部分。但是,输出并不反映重复指令可能发生的合并或重写。 httpd是一个模块化服务器。这意味着核心服务器中只包含最基本的功能。可通过可加载到httpd中的模块提供扩展功能。默认情况下,编译时服务器中包含一组基本模块。如果将服务器编译为使用动态加载的模块,则可以单独编译模块,并随时使用LoadModule指令添加模块。否则,必须重新编译httpd以添加或删除模块。通过将配置指令封装在块中,可以在特定模块存在的条件下包含配置指令。但是,块不是必需的,在某些情况下可能会掩盖缺少重要模块的事实。 要查看当前编译到服务器中的模块,可以使用-l命令行选项。您还可以使用-M命令行选项查看动态加载的模块。
[root@kittod ~]# httpd -l
Compiled in modules:
core.c
mod_so.c
http_core.c
[root@kittod ~]# httpd -M
Loaded Modules:
core_module (static)
so_module (static)
http_module (static)
access_compat_module (shared)
...
2.3、服务启动
如果配置文件中指定的侦听默认为80(或1024以下的任何其他端口),则必须具有root权限才能启动apache,以便它可以绑定到此特权端口。一旦服务器启动并执行一些初步活动(如打开其日志文件),它将启动几个子进程,这些子进程负责侦听和应答来自客户端的请求。主httpd进程继续作为根用户运行,但子进程作为权限较低的用户运行。这由选定的多处理模块控制。 调用httpd可执行文件的推荐方法是使用apachectl控制脚本。该脚本设置某些环境变量,这些变量是httpd在某些操作系统下正常运行所必需的,然后调用httpd二进制文件。apachectl将传递任何命令行参数,因此任何httpd选项也可以与apachectl一起使用。 如果在启动过程中一切顺利,服务器将与终端分离,命令提示符几乎会立即返回。这表示服务器已启动并正在运行。然后,您可以使用浏览器连接到服务器,并在DocumentRoot目录中查看测试页面。
[root@kittod ~]# systemctl start httpd
2.4、绑定到地址和端口
当httpd启动时,它绑定到本地机器上的某个端口和地址,并等待传入的请求。默认情况下,它侦听计算机上的所有地址。但是,可能需要告知它在特定端口上侦听,或仅在选定的地址上侦听,或两者的组合。这通常与虚拟主机功能相结合,虚拟主机功能决定了httpd如何响应不同的IP地址、主机名和端口。 Listen指令告诉服务器只接受指定端口或地址和端口组合上的传入请求。如果在Listen指令中只指定了端口号,服务器将侦听所有接口上的给定端口。如果给定了IP地址和端口,服务器将侦听给定的端口和接口。多个侦听指令可用于指定要侦听的多个地址和端口。服务器将响应来自任何列出的地址和端口的请求。 例如,要使服务器同时接受端口80和端口8000上的连接,请在所有接口上使用:
Listen 80
Listen 8000
要使服务器在一个接口的端口80上接受连接,在另一个接口的端口8000上接受连接,请使用:
Listen 192.0.2.1:80
Listen 192.0.2.5:8000
IPv6地址必须用方括号括起来,如下例所示:
Listen [2001:db8::a00:20ff:fea7:ccea]:80
三、配置文件
3.1、主配置文件
主配置文件所在路径为:
[root@kittod ~]# ll /etc/httpd/conf/httpd.conf
-rw-r--r--. 1 root root 11921 Oct 20 14:25 /etc/httpd/conf/httpd.conf
3.3、默认测试页面
当用户没有自定义页面在默认目录 /var/www/html下时,服务器会按照以下配置文件引导访问该测试页面。
[root@kittod ~]# ll /etc/httpd/conf.d/welcome.conf
-rw-r--r--. 1 root root 516 Jun 15 2020 /etc/httpd/conf.d/welcome.conf
3.4、测试自定义页面
给指定文件写入信息,测试自定义页面
[root@kittod ~]# echo welcome to httpd!!!:) > /var/www/html/index.html
#浏览器网址输入 对应IP:对应端口(默认80)
|