RHCE(httpd的介绍及安装部署)

一、介绍

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.apa
che.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,如下表所示。
默认配置文件通常称为httpd.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

为了便于管理,配置经常被分解为多个较小的文件。这些文件通过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配置文件每行包含一个指令。反斜杠""可用作行上的最后一个字符,以指示指令继续到下一
行。反斜杠和行尾之间不得有其他字符或空格。
指令的参数用空格分隔。如果参数包含空格,则必须将该参数括在引号中。
配置文件中的指令不区分大小写,但指令的参数通常区分大小写。以散列字符“#”开头的行被视为注
释,将被忽略。注释不能与配置指令包含在同一行中。忽略指令之前出现的空白,因此为了清晰起见,可以缩进指令。空白行也将被忽略。
可以在配置文件行中使用语法 V A R 使 用 D e f i n e o f 或 s h e l l 环 境 变 量 定 义 的 变 量 值 。 如 果 “ V A R ” 是 有 效 变 量 的 名 称 , 则 该 变 量 的 值 将 被 替 换 到 配 置 文 件 行 中 的 该 点 中 , 并 且 处 理 将 继 续 , 就 好 像 该 文 本 直 接 在 配 置 文 件 中 找 到 一 样 。 使 用 D e f i n e 定 义 的 变 量 优 先 于 s h e l l 环 境 变 量 。 如 果 未 找 到 “ V A R ” 变 量 , 则 字 符 {VAR}使用Define of或shell环境变量定义的变量值。如果“VAR”是有 效变量的名称,则该变量的值将被替换到配置文件行中的该点中,并且处理将继续,就好像该文本直接在配置文件中找到一样。使用Define定义的变量优先于shell环境变量。如果未找到“VAR”变量,则字符 VAR使DefineofshellVAR使DefineshellVAR{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

[root@kittod ~]# systemctl start httpd
在这里插入图片描述
如果Apache在启动过程中遇到致命问题,它将在退出之前向控制台或错误日志写入一条描述该问题
的消息。最常见的错误消息之一是“无法绑定到端口…”。此消息通常由以下任一原因引起:
1.当未以root用户身份登录时,尝试在特权端口上启动服务器;
2.当另一个Apache实例或其他web服务器已绑定到同一端口时,尝试启动服务器。

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

重叠的侦听指令将导致致命错误,从而阻止服务器启动。

(48)Address already in use: make_sock: could not bind to address [::]:80

重新启动httpd时,必须特别考虑对Listen指令的更改。在重新启动期间,httpd会保持端口绑定(与原始配置中一样),以避免在任何新的尝试连接到服务器时产生“连接被拒绝”错误。如果对所使用的侦听指令集进行了更改,而这些更改与旧配置冲突,则配置将失败,服务器将终止。
比如,原有配置如下:

Listen 127.0.0.1:80

由于跨所有地址绑定到端口80与仅在127.0.0.1上绑定到端口80冲突,以下操作可能会失败。

Listen 80

要使这些配置更改生效,必须先停止服务器,然后再启动服务器。
大多数配置都不需要可选的第二个协议参数Listen。如果未指定,则https是端口443的默认值,
http是所有其他端口的默认值。该协议用于确定哪个模块应处理请求,并使用AcceptFilter指令应用特定于协议的优化。只有在非标准端口上运行时,才需要设置协议。例如,在端口8443上运行https站点:

Listen 192.170.2.1:8443 https

2.5、与虚拟主机一起工作

Listen指令不实现虚拟主机—它只告诉主服务器要侦听的地址和端口。如果没有使用指令,服务器
将以相同的方式处理所有接受的请求。但是,可用于为一个或多个地址或端口指定不同的行为。要实现 VirtualHost,必须首先告知服务器侦听要使用的地址和端口。然后,应为指定的地址和端口创建一个部分,以设置此虚拟主机的行为。请注意,如果为服务器未侦听的地址和端口设置了,则无法访问该地址和端口。

おすすめ

転載: blog.csdn.net/weixin_53002381/article/details/121238120