网站搜索

如何使用基于名称的虚拟主机和 SSL 证书设置独立 Apache 服务器 - 第 4 部分


LFCELinux 基金会认证工程师的缩写)是经过培训的专业人员,拥有在 Linux 系统中安装、管理和排除网络服务故障的专业知识,并负责系统架构的设计、实施和持续维护。

在本文中,我们将向您展示如何配置 Apache 来提供 Web 内容,以及如何设置基于名称的虚拟主机和 SSL,包括自签名证书。

介绍 Linux 基金会认证计划 (LFCE)。

注意:本文不应该是 Apache 的综合指南,而是 LFCE 自学此主题的起点 考试。因此,我们在本教程中也不会介绍 Apache 的负载平衡。

您可能已经知道执行相同任务的其他方法,考虑到 Linux 基金会认证严格基于性能,这是可以。因此,只要您“完成工作”,您就有很大的机会通过考试。

要求

有关安装和启动 Apache 的说明,请参阅本系列的第 1 部分(“安装网络服务并配置引导时自动启动”)。

现在,您应该已经安装并运行了 Apache Web 服务器。您可以使用以下命令验证这一点。

ps -ef | grep -Ei '(apache|httpd)' | grep -v grep

注意:上面的命令检查是否存在 apachehttpd(最常见的名称) Web 守护进程)在正在运行的进程列表中。如果 Apache 正在运行,您将获得类似于以下内容的输出。

测试 Apache 安装并检查其是否正在运行的最终方法是启动 Web 浏览器并指向服务器的 IP。我们应该会看到以下屏幕,或者至少会看到一条确认 Apache 正在运行的消息。

配置阿帕奇

Apache 的主配置文件可以位于不同的目录中,具体取决于您的发行版。

/etc/apache2/apache2.conf 		[For Ubuntu]
/etc/httpd/conf/httpd.conf		[For CentOS]
/etc/apache2/httpd.conf 		[For openSUSE]

对我们来说幸运的是,配置指令在 Apache 项目网站上有非常详细的记录。我们将在本文中引用其中的一些内容。

使用 Apache 在独立服务器中提供页面服务

Apache 最基本的用法是在尚未配置虚拟主机的独立服务器中提供网页服务。 DocumentRoot 指令指定 Apache 将在其中提供网页文档的目录。

请注意,默认情况下,所有请求都从此目录中获取,但您也可以使用符号链接和/或别名也可用于指向其他位置。

除非与 Alias 指令匹配(允许文档存储在本地文件系统中,而不是存储在 DocumentRoot 指定的目录下),否则服务器会附加请求的 URL 中的路径到文档根目录以创建文档的路径。

例如,给定以下 DocumentRoot

当浏览器指向[服务器IP主机名]/lfce/howtoing.html时,服务器将打开/var/ www/html/lfce/howtoing.html(假设存在此类文件)并使用 200OK)响应将事件保存到其访问日志中。

访问日志通常位于 /var/log 内的代表性名称下,例如 access.logaccess_log。您甚至可以在子目录中找到此日志(以及错误日志)(例如 CentOS 中的 /var/log/httpd)。否则,失败的事件仍将记录到访问日志中,但带有 404(未找到)响应。

此外,失败的事件将记录在错误日志中:

访问日志的格式可以根据您的需要使用主配置文件中的LogFormat指令进行自定义,但您不能对错误日志进行相同的操作

访问日志的默认格式如下:

LogFormat "%h %l %u %t \"%r\" %>s %b" [nickname]

其中每个字母前面有一个百分号表示服务器记录某条信息:

String

说明

 %h

 远程主机名或 IP 地址

 %l

 远程日志名称

 %u

 如果请求经过身份验证,则为远程用户

 %t

 收到请求的日期和时间

 %r

 向服务器发出请求的第一行

 %>s

 请求的最终状态

 %b

 响应大小 [字节]

nickname 是一个可选别名,可用于自定义其他日志,而无需再次输入整个配置字符串。

您可以参考 Apache 文档中的 LogFormat 指令[自定义日志格式部分]以获取更多选项。

这两个日志文件(访问错误)都是一个很好的资源,可以快速分析 Apache 服务器上发生的情况。不用说,它们是系统管理员用来解决问题的第一个工具。

最后,另一个重要的指令是 Listen,它告诉服务器接受指定端口或地址/端口组合上的传入请求:

如果只定义了端口号,apache将监听所有网络接口上的给定端口(通配符*用于指示“所有网络接口”)。

如果同时指定了 IP 地址和端口,那么 apache 将侦听给定端口和网络接口的组合。

请注意(正如您将在下面的示例中看到的),可以同时使用多个 Listen 指令来指定要侦听的多个地址和端口。此选项指示服务器响应来自任何列出的地址和端口的请求。

设置基于名称的虚拟主机

虚拟主机的概念定义了由同一台物理机提供服务的单个站点(或域)。实际上,多个站点/域可以通过单个“真实”服务器作为虚拟主机提供服务。此过程对于最终用户来说是透明的,在最终用户看来,不同的站点是由不同的 Web 服务器提供服务的。

基于名称的虚拟主机允许服务器依赖客户端将主机名报告为 HTTP 标头的一部分。因此,使用这种技术,许多不同的主机可以共享相同的IP地址。

每个虚拟主机都在 DocumentRoot 内的目录中配置。对于我们的例子,我们将使用以下虚拟域进行测试设置,每个虚拟域都位于相应的目录中:

  1. ilovelinux.com – /var/www/html/ilovelinux.com/public_html
  2. linuxrocks.org – /var/www/html/linuxrocks.org/public_html

为了页面能够正确显示,我们将每个 VirtualHost 的目录 chmod755

chmod -R 755 /var/www/html/ilovelinux.com/public_html
chmod -R 755 /var/www/html/linuxrocks.org/public_html

接下来,在每个 public_html 目录中创建一个示例 index.html 文件:

<html>
  <head>
    <title>www.ilovelinux.com</title>
  </head>
  <body>
    <h1>This is the main page of www.ilovelinux.com</h1>
  </body>
</html>

最后,在 CentOSopenSUSE 中,在 /etc/httpd/conf/httpd.conf/ 底部添加以下部分etc/apache2/httpd.conf 分别,或者如果已经存在则修改它。


<VirtualHost *:80>
     ServerAdmin [email  
     DocumentRoot /var/www/html/ilovelinux.com/public_html
     ServerName www.ilovelinux.com
     ServerAlias www.ilovelinux.com ilovelinux.com
     ErrorLog /var/www/html/ilovelinux.com/error.log
     LogFormat "%v %l %u %t \"%r\" %>s %b" myvhost
     CustomLog /var/www/html/ilovelinux.com/access.log	myvhost
</VirtualHost>
<VirtualHost *:80>
     ServerAdmin [email  
     DocumentRoot /var/www/html/linuxrocks.org/public_html
     ServerName www.linuxrocks.org
     ServerAlias www.linuxrocks.org linuxrocks.org
     ErrorLog /var/www/html/linuxrocks.org/error.log
     LogFormat "%v %l %u %t \"%r\" %>s %b" myvhost
     CustomLog /var/www/html/linuxrocks.org/access.log	myvhost
</VirtualHost>

请注意,您还可以在 /etc/httpd/conf.d 目录内的单独文件中添加每个虚拟主机定义。如果您选择这样做,每个配置文件必须命名如下:

/etc/httpd/conf.d/ilovelinux.com.conf
/etc/httpd/conf.d/linuxrocks.org.conf

换句话说,您需要将.conf添加到站点或域名中。

Ubuntu 中,每个单独的配置文件都命名为 /etc/apache2/sites-available/[站点名称].conf。然后分别使用 a2ensitea2dissite 命令启用或禁用每个站点,如下所示。

a2ensite /etc/apache2/sites-available/ilovelinux.com.conf
a2dissite /etc/apache2/sites-available/ilovelinux.com.conf
a2ensite /etc/apache2/sites-available/linuxrocks.org.conf
a2dissite /etc/apache2/sites-available/linuxrocks.org.conf

a2ensitea2dissite 命令创建指向虚拟主机配置文件的链接,并将它们放置(或删除)在 /etc/apache2/sites-enabled > 目录。

为了能够从另一个 Linux 机器浏览到这两个站点,您需要在该计算机的 /etc/hosts 文件中添加以下行,以便将对这些域的请求重定向到特定 IP地址。


[IP address of your web server]	www.ilovelinux.com
[IP address of your web server]	www.linuxrocks.org 

作为一项安全措施,SELinux 不允许 Apache 将日志写入默认的 /var/log/httpd 之外的目录。

您可以禁用 SELinux,或设置正确的安全上下文:


chcon system_u:object_r:httpd_log_t:s0 /var/www/html/xxxxxx/error.log

其中 xxxxxx/var/www/html 中您定义虚拟主机的目录。

重新启动 Apache 后,您应该在上述地址看到以下页面:

使用 Apache 安装和配置 SSL

最后,我们将创建并安装一个自签名证书以与 Apache 一起使用。这种设置在小型环境(例如专用 LAN)中是可以接受的。

但是,如果您的服务器将通过 Internet 向外界公开内容,您将需要安装由第 3 方签名的证书以证实其真实性。无论哪种方式,证书都将允许您对传输到您的站点、从您的站点或在您的站点内传输的信息进行加密。

CentOSopenSUSE中,您需要安装mod_ssl软件包。

yum update && yum install mod_ssl 		[On CentOS]
zypper refresh && zypper install mod_ssl	[On openSUSE]

而在 Ubuntu 中,您必须为 Apache 启用 ssl 模块。

a2enmod ssl

以下步骤是使用 CentOS 测试服务器进行解释的,但您的设置在其他发行版中应该几乎相同(如果您遇到任何类型的问题,请随时使用评论留下您的问题形式)。

第 1 步[可选]:创建一个目录来存储您的证书。

mkdir /etc/httpd/ssl-certs

第 2 步:生成您的自签名证书和保护该证书的密钥。

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/httpd/ssl-certs/apache.key -out /etc/httpd/ssl-certs/apache.crt

对上面列出的选项的简要说明:

  1. req -X509 表示我们正在创建 x509 证书。
  2. -nodes (NO DES) 表示“不加密密钥”。
  3. -days 365 是证书的有效天数。
  4. -newkey rsa:2048 创建 2048 位 RSA 密钥。
  5. -keyout /etc/httpd/ssl-certs/apache.key 是 RSA 密钥的绝对路径。
  6. -out /etc/httpd/ssl-certs/apache.crt 是证书的绝对路径。

第 3 步:打开您选择的虚拟主机配置文件(或其在 /etc/httpd/conf/httpd.conf 中的相应部分,如前所述)并将以下行添加到监听端口 443 的虚拟主机声明。

SSLEngine on
SSLCertificateFile /etc/httpd/ssl-certs/apache.crt
SSLCertificateKeyFile /etc/httpd/ssl-certs/apache.key

请注意,您需要添加。

NameVirtualHost *:443

在顶部,在正下方

NameVirtualHost *:80

这两个指令都指示 apache 侦听所有网络接口的端口 44380

以下示例取自 /etc/httpd/conf/httpd.conf

然后重新启动阿帕奇,

service apache2 restart 			[sysvinit and upstart based systems]
systemctl restart httpd.service 		[systemd-based systems]

并将浏览器指向 https://www.ilovelinux.com。您将看到以下屏幕。

继续并点击“我了解风险”和“添加例外”。

最后,勾选“永久存储此异常”并点击“确认安全异常”。

您将使用 https 重定向到您的主页。

概括

在这篇文章中,我们展示了如何使用 SSL 配置 Apache基于名称的虚拟主机以保护数据传输。如果由于某种原因您遇到任何问题,请随时使用下面的评论表告诉我们。我们非常乐意帮助您成功完成设置。

另请阅读

  1. 基于 Apache IP 和基于名称的虚拟主机
  2. 使用启用/禁用虚拟主机选项创建 Apache 虚拟主机
  3. 使用“Apache GUI”工具监控“Apache Web Server”