Apache HTTP Server (httpd) 是最流行、最强大的 Web 服务器之一,以其灵活性、性能和广泛的功能而闻名。它广泛用于托管网站和 Web 应用程序。在 CentOS Stream 9 上设置 Apache 可让您利用其强大的功能来满足您的 Web 托管需求。此外,使用 Let's Encrypt 的免费 SSL 证书保护您的网站可确保您的网站加密且值得信赖。
要在 CentOS Stream 9 上安装 Apache HTTP Server 并设置 Let's Encrypt SSL 证书,请按照本指南中概述的步骤操作。这将为您提供安全高效的 Web 服务器配置。
在安装 Apache 之前确保 CentOS Stream 系统已完全更新
在 CentOS Stream 机器上继续安装 Apache 之前,我们必须验证我们的系统是否完全更新。这不仅仅是一种预防措施。更新系统有助于防止兼容性问题,并显著增强其稳定性、安全性和性能。
为了实现这一点,请在终端中执行以下命令:
sudo dnf upgrade --refresh
此命令启动更新机制,获取并安装系统的最新软件更新和安全补丁。在继续安装 Apache 之前,让更新过程完全结束至关重要。这可确保您的系统处于最佳状态、最佳配置,并准备好运行 Apache,而不会遇到任何障碍或兼容性问题。
通过 DNF 命令安装 Apache HTTPD
第二步是在您的 CentOS Stream 系统上安装 Apache 或 HTTPD。这是一个简单的过程,得益于强大的 DNF 包管理器。DNF 或 Dandified Yum 包管理器简化了软件包的安装、更新和管理。
通过在终端中运行以下命令来启动 Apache(HTTPD)的安装:
sudo dnf install httpd
此命令启动安装机制并获取和安装所有必要的组件,以允许 Apache (HTTPD) 在您的系统上运行。该过程只需几分钟即可完成。之后,Apache (HTTPD) 将完全安装并可供使用。
激活并配置 Apache HTTPD 以在系统启动时运行
在 CentOS Stream 系统上成功安装 Apache (HTTPD) 后,接下来的关键操作是激活该服务并将其配置为在系统启动时自动启动。Apache (HTTPD) 始终处于活动状态并准备好在系统启动时处理 Web 请求。
如果 Apache(HTTPD)服务未激活或设置为默认运行,请在终端中使用这些命令启动该服务并确保它在系统启动时运行:
sudo systemctl start httpd
sudo systemctl enable httpd
第一个命令 sudo systemctl start httpd 启动 Apache (HTTPD) 服务,而第二个命令 sudo systemctl enable httpd 将该服务设置为在系统启动时自动运行。通过执行这两个命令,您可以确保 Apache (HTTPD) 始终可访问且处于活动状态,每次系统启动时都可以随时处理 Web 请求。
另外,您可以将前两个步骤压缩为一个命令:
sudo systemctl enable httpd --now
命令 sudo systemctl enable httpd –now 中的 –now 选项会同时启动 Apache (HTTPD) 服务并将其配置为在系统启动时自动启动。此单个命令将前面步骤中的两个独立命令统一起来,使流程更加精简和高效。
检查 Apache HTTPD 服务状态
最后,我们应该利用以下 systemctl 命令来验证 Apache(HTTPD)是否成功实现并运行:
systemctl status httpd
此命令为您提供 Apache (HTTPD) 服务的实时状态,包括可能出现的任何错误或消息。通过仔细检查服务状态,您可以确认 Apache (HTTPD) 正在无缝运行。
配置 FirewallD 规则
在 CentOS Stream 上安装 Apache(HTTPD)后,您可能会注意到防火墙不包含标准端口 80 和 443 的预配置规则。您必须在继续操作之前配置这些防火墙规则,以提高 Web 应用程序的安全性。
使用firewall-cmd工具(CentOS Stream的默认防火墙管理实用程序)设置防火墙规则。您需要配置的规则将根据您打算使用的端口而有所不同。但是,我们在以下步骤中列出了所有关键选项。
打开端口 80 和 443
我们将运行前两个命令来打开端口 80 和 443。这些端口分别处理传入的 HTTP 和 HTTPS 流量。
要打开端口 80 或 HTTP,请运行以下命令:
sudo firewall-cmd --permanent --add-port=80/tcp
接下来,使用以下命令打开端口 443 或 HTTPS:
sudo firewall-cmd --permanent --add-port=443/tcp
验证防火墙更改
指定要打开的端口后,我们必须指示防火墙实施这些更改。使用以下命令重新加载防火墙规则:
sudo firewall-cmd --reload
理解影响
至关重要的是要敏锐地了解打开系统端口所带来的安全隐患。通过有选择地只打开必要的端口,您可以增强 Web 应用程序对未经授权的访问和潜在安全威胁的防御能力。这强调了为什么正确配置 CentOS Stream 上 Apache (HTTPD) 安装的防火墙规则至关重要。
验证 Apache HTTPD 访问
在精心配置 Firewalld 后,请确保您可以通过 Web 浏览器访问 Apache (HTTPD) 登录页面。启动您最喜欢的 Web 浏览器并转到 http://localhost 或 http://your_server_ip。
要通过服务器的 IP 访问:
http://your_server_ip
或者,通过 localhost 访问:
http://localhost
当您精确配置所有内容时,Apache(HTTPD)默认登录页面将向您致意。此页面显示一条消息,确认服务器按预期运行。该页面将类似于:
创建并配置虚拟主机
本节将深入探讨使用 Apache (HTTPD) 创建虚拟主机的实际方面,Apache 是一种灵活的 Web 服务器,以能够在单个服务器上托管多个域而闻名。此实用程序类似于 Nginx 的“服务器块”属性。在接下来的教程中,我们将说明如何为给定域(表示为“example-domain.com”)制定虚拟主机。当然,您将用您的特定域名替换此示例域。
创建虚拟主机有助于独立管理每个域的配置。这可以控制 Web 服务器环境的各个方面,包括安全性、性能和自定义设置。如果您打算在一台服务器上托管多个网站,或者为网站的不同部分维护单独的设置,这将特别有利。使用 Apache (HTTPD),您可以轻松设计虚拟主机来满足这些要求。
创建和配置目录
开始设置虚拟主机需要创建一个新目录,作为虚拟主机的根文件夹。此目录的名称通常与您的域名一致。
例如,如果您的域名是“example.com”,您可以使用以下命令生成一个新目录:
sudo mkdir /var/www/example.com
此命令需要将“example.com”替换为您的域名。因此,该目录将存放与您的虚拟主机相关的文件和资产,包括 HTML 文件、图像、脚本和其他资源。
为每个虚拟主机设置单独的目录有助于明确分离关注点,这对于安全和故障排除而言非常重要。
新目录可能需要适当的所有权和权限才能允许 Apache (HTTPD) 访问。后续命令设置正确的所有权和权限:
sudo chown -R apache:apache /var/www/example.com
sudo chmod -R 755 /var/www/example.com
准备好新的目录后,我们就可以设置您的虚拟主机。
创建 index.html 文件
文本编辑器会为您的虚拟主机生成一个 index.html 文件。在我们的教程中,我们将使用 nano 文本编辑器,不过您也可以选择任何您喜欢的文本编辑器。
执行以下命令创建index.html文件:
sudo nano /var/www/example.com/index.html
在文本编辑器中,开始创建 index.html 文件的内容。此文件通常作为用户访问您网站的第一个接触点。
这是一个简单的例子:
<html>
<head>
<title>Example Domain</title>
</head>
<body>
<h1>Welcome to Example Domain</h1>
<p>This is a sample page for the domain example.com.</p>
</body>
</html>
完成 index.html 文件的内容后,保存文件并退出文本编辑器。对于 nano,按 Ctrl + X、Y 和 Enter 即可完成。
配置虚拟主机目录
确保 Apache Web 服务器的目录设置正确,可确保无缝且有序的配置。具体来说,使用“sites-available”和“sites-enabled”目录。此配置与 Nginx 中采用的配置相似,并促进了有序且可访问的配置。
要创建这些目录,请使用以下命令:
sudo mkdir /etc/httpd/sites-available /etc/httpd/sites-enabled
随后,指示 Apache 在“/etc/httpd/sites-available”目录中查找虚拟主机文件:
sudo nano /etc/httpd/conf/httpd.conf
在打开的配置文件中,在末尾添加一行“IncludeOptional sites-enabled/*.conf”。此行指示 Apache 将所有虚拟主机配置文件包含在“sites-enabled”目录中。
IncludeOptional sites-enabled/*.conf
或者,您可能希望注释“IncludeOptional conf.d/*.conf”,禁用 Apache 搜索虚拟主机文件的默认文件夹。这有助于防止任何潜在的混淆。
例子:
#IncludeOptional conf.d/*.conf
IncludeOptional sites-enabled/*.conf
要保存文件并退出,请使用键盘组合 CTRL + O,然后按 CTRL + X。
创建虚拟主机配置文件
接下来,使用文本编辑器,我们将在 /etc/httpd/sites-available/example.com.conf 创建一个虚拟主机配置文件。
sudo nano /etc/httpd/sites-available/example.com.conf
在将以下配置块中的占位符信息复制到位于 /etc/httpd/sites-available/example.com.conf 的虚拟主机配置文件之前,请使用您的 ServerName、ServerAlias 和 Document Root 填写它。
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName example_domain
ServerAlias www.example_domain
DocumentRoot /var/www/example.com/
</VirtualHost>
调整服务器指令以满足您的特定要求。
步骤5:修改访问权限
要授予对您的服务器的公共访问权限,请在 /etc/httpd/conf/httpd.conf 配置文件中修改 Apache 服务的访问权限。默认配置拒绝访问。如果您忽略此步骤,当人们尝试访问您的网站时,您可能会遇到 HTTP 403 错误。
sudo nano /etc/httpd/conf/httpd.conf
将以下块添加到您的文件中,确保调整根目录以匹配您自己的目录。
<Directory /var/www/example.com/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
要保存这些更改,请使用键盘组合 CTRL+O,然后使用 CTRL+X 退出文本编辑器。
第 6 步:在 CentOS Stream 上启用 Apache 虚拟主机
要设置虚拟主机,您必须将其激活作为最后一步。使用下面提供的命令从 sites-available 目录创建到 sites-enabled 目录的符号链接:
sudo ln -s /etc/httpd/sites-available/example.com.conf /etc/httpd/sites-enabled/
您需要重新启动 Apache 服务才能完成激活过程。
sudo systemctl restart httpd
重新启动 Apache 服务后,打开 Web 浏览器并导航至“HTTP://example_domain”。如果您尚未注册域名,则可以使用 IP 地址(本地或远程)访问您的网站。如果您正确设置了所有内容,则在 index.html 文件中创建的登录页面将向您致意。
附加命令和提示
安全目录和文件
设置安全权限
在 CentOS 上的 Apache 中使用文件和目录的安全权限至关重要。通常会授予过多的权限,例如完全公开访问。为防止安全风险,建议限制权限。对于目录,使用 chmod 755
对于文件, chmod 644
。以下是设置这些权限的命令。请记住,某些应用程序可能需要不同的权限,例如 777
适用于 phpBB。
- 对于目录:
sudo find /var/www/example.com/ -type d -exec chmod 755 "{}" \;
- 对于文件:
sudo find /var/www/example.com/ -type f -exec chmod 644 "{}" \;
这些命令将取代 /var/www/example.com/
使用适当的目录路径。此步骤不能保证完全安全,但通过阻止公众访问关键文件可以显著降低风险。
使用 Let's Encrypt SSL 保护 Apache
安装 Let's Encrypt SSL 证书
使用 SSL 证书保护您的 Apache 服务器对于安全的客户端-服务器连接是必要的。Let's Encrypt 提供免费的自动化 SSL 证书。首先,确保已启用 CRB 存储库,并安装了 EPEL 存储库。CentOS Stream 9 和 8 之间的安装过程略有不同。
对于 CentOS Stream 9:
- 启用 CRB:
sudo dnf config-manager --set-enabled crb
- 安装 EPEL 存储库:
sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
接下来,安装 mod_ssl
并捕捉:
sudo dnf install mod_ssl
在您的 CentOS Stream 发行版上激活 EPEL,然后安装 Snap。
sudo dnf install snapd -y
安装后,请确保立即启用 Snap 并启动系统。
sudo systemctl enable snapd --now
下一步是安装 snap 核心,它将处理 snap 包运行所需的所有依赖项。
sudo snap install core
为 snapd 目录创建符号链接。
sudo ln -s /var/lib/snapd/snap /snap
使用以下终端命令安装 Certbot snap 包。
sudo snap install --classic certbot
最后,为 Certbot snap 包创建另一个符号链接。
sudo ln -s /snap/bin/certbot /usr/bin/certbot
为 Apache 运行 Certbot
在终端中运行以下命令,使用 Certbot 生成 SSL 证书。
sudo certbot --dry-run --apache --agree-tos --redirect --hsts --staple-ocsp --email you@example.com -d www.example.com
对于 Let's Encrypt 的新手,您可以寻求有关命令中的缩写的更多信息。
- “–dry-run”选项可让您在不改变系统的情况下对证书生成过程进行测试运行。此选项对于测试非常有用。
- “--apache”选项用于为 Apache 网络服务器生成证书。
- “–agree-tos”选项允许您接受提供 SSL 证书的证书颁发机构 Let's Encrypt 的服务条款。
- “--redirect”选项自动将所有 HTTP 流量重定向到 HTTPS。
- “–hsts” 选项启用 HTTP 严格传输安全 (HSTS)。此安全功能可告知浏览器仅通过安全的 HTTPS 连接访问您的网站,从而帮助防止协议降级攻击和 cookie 劫持。
- “–staple-ocsp”选项可启用在线证书状态协议(OCSP)装订,无需联系证书颁发机构即可验证 SSL 证书的撤销状态。
- 使用“--email”选项指定您想要与证书关联的电子邮件地址。
- “-d”选项指定要为其生成证书的域名。在此示例中,域名为“www.example.com”。
或者,您可以使用以下命令并按照逐步提示获得更易于访问的体验。
sudo certbot certonly --apache
通过使用上述参数执行命令,您将指示 certbot 为您的域“www.example.com”创建 SSL 证书,同时还包括必要的安全功能,如强制 HTTPS 301 重定向、Strict-Transport-Security 标头和 OCSP Stapling。请务必注意,您应该将命令中的电子邮件地址替换为您自己的电子邮件地址,并确保将域名“www.example.com”替换为您想要的域名。
在 Apache 上配置 SSL
获取 SSL 证书后,配置 Apache 服务器以使用它。编辑 ssl.conf
文件并添加以下行,将“example.com”替换为您的域名:
sudo nano /etc/httpd/conf.d/ssl.conf
在配置文件中,添加以下行:将“example.com”替换为您的域名。
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
保存更改并重新启动 Apache 以使配置生效。
sudo systemctl restart httpd
此设置可确保浏览器和您的网站之间进行加密、安全的通信。
自动更新证书
为了使 SSL 证书保持最新,请设置一个 cron 作业来自动更新。使用试运行测试更新过程:
sudo certbot renew --dry-run
使用 systemctl list-timers 命令检查计时器并确认“snap.certbot.renew.timer”存在。
systemctl list-timers snap.certbot.renew.timer
使用命令“systemctl list-timers –all”查看系统上的活动和非活动计时器。此命令概述所有计时器,包括“snap.certbot.renew.timer”。 “snap.certbot.renew.timer”可确保在证书到期前自动检查和续订。因此,您无需担心续订过程。
systemctl list-timers --all
Apache HTTPD 管理
在您的服务器上成功设置 Apache 后,请记住以下一些有效管理的基本要点。
Apache 服务器日志
Apache 服务器日志存储在 /var/log/httpd/ 目录中。访问日志和错误日志的默认文件名分别为 access.log 和 error.log。但是,可以在虚拟主机配置文件中更改这些名称。
以下是更改虚拟主机配置文件中的 Apache 服务器日志的示例。
<VirtualHost *:80>
ServerName www.example.com
DocumentRoot /var/www/example.com
# Change access log to custom-access.log
CustomLog /var/log/httpd/custom-access.log combined
# Change error log to custom-error.log
ErrorLog /var/log/httpd/custom-error.log
</VirtualHost>
此示例将访问日志和错误日志分别更改为 custom-access.log 和 custom-error.log。您可以将日志文件的名称更改为您喜欢的任何名称,并在虚拟主机配置文件中更新相应的路径。
Apache 命令
以下是管理Apache时常用的一些命令:
停止 Apache 网络服务器:
sudo systemctl stop httpd
启动 Apache 网络服务器:
sudo systemctl start httpd
重新启动 Apache 网络服务器:
sudo systemctl restart httpd
重新加载 Apache 网络服务器:
sudo systemctl reload httpd
在服务器启动时禁用 Apache:
sudo systemctl disable httpd
在服务器启动时启用 Apache:
sudo systemctl enable httpd
如何更新 Apache HTTPD
为了保持 Apache 更新,请运行您通常使用的命令来检查您的系统是否是最新的。
sudo dnf update --refresh
在执行任何升级之前,备份或创建系统映像非常重要,因为有时会出现错误。以下命令将刷新所有系统软件包(包括 Apache),并提示您升级。
如何删除 Apache HTTPD
要从系统中卸载 Apache,请使用以下命令。
sudo systemctl disable httpd --now
现在,使用以下命令完全删除 Apache。
sudo dnf remove httpd
剩余文件可能会保留在 /etc/httpd 主目录中,因此让我们删除该文件夹。
sudo rm -R /etc/httpd/
结论
在 CentOS Stream 系统上成功设置 Apache HTTP Server 和 Let's Encrypt 后,您的网站将既强大又安全。定期更新 Apache 并更新 Let's Encrypt SSL 证书将有助于保持最佳安全性和性能。享受 Apache HTTP Server 和 Let's Encrypt 为您的 Web 托管环境带来的可靠性和安全性。