如何配置 Apache Web 服务器

学习如何使用 Apache 托管您自己的网站,Apache 是一款稳健、知名且易于配置的 Web 服务器。
435 位读者喜欢这篇文章。
Image of spider web

You as a Machine。由 Rikki Endsley 修改。CC BY-SA 2.0。

多年来,我一直在托管自己的网站。自从 20 多年前从 OS/2 切换到 Linux 以来,我一直使用 Apache 作为我的服务器软件。Apache 稳健、知名,并且对于基本安装来说非常容易配置。对于更复杂的设置(例如多个网站)的配置,它实际上也没有那么困难。

Apache Web 服务器的安装和配置必须以 root 用户身份执行。配置防火墙也需要以 root 用户身份执行。使用浏览器查看此项工作的成果应该以非 root 用户身份完成。(我在我的虚拟主机上使用用户 student。)

安装

注意:本文已使用 Fedora 33 和 Apache 2.4.46 进行了更新。如果您使用不同的发行版或不同版本的 Fedora,您的命令以及配置文件的位置和内容可能会有所不同。但是,无论发行版如何,您需要修改的配置行都是相同的。

Apache Web 服务器很容易安装。只需一个命令,您就可以安装它以及所有必要的依赖项

$ dnf install httpd

Apache 的所有配置文件都位于 /etc/httpd/conf/etc/httpd/conf.d 中。您将使用 Apache 运行的网站的数据默认位于 /var/www 中,但如果您愿意,可以更改它。

配置

主要的 Apache 配置文件是 /etc/httpd/conf/httpd.conf。它包含许多配置语句,这些语句对于基本安装来说不需要更改。事实上,只需对该文件进行少量更改即可启动并运行一个基本的网站。该文件非常大,因此,为了避免用大量不必要的内容使本文显得杂乱,我将仅显示您需要更改的指令。

首先,花一点时间浏览 httpd.conf 文件,熟悉一下它。我喜欢 Red Hat 版本的大多数配置文件的一点是,其中有很多注释,描述了文件中的各个部分和配置指令。httpd.conf 文件也不例外,因为它被很好地注释了。使用这些注释来理解该文件正在配置什么。

要更改的第一个项目是 Listen 语句,它定义了 Apache 将在其上监听页面请求的 IP 地址和端口。现在,您只需要使该网站对本地计算机可用,因此请使用 localhost 地址。完成后的行应如下所示

Listen 127.0.0.1:80

通过将此指令设置为 localhost 的 IP 地址,Apache 将仅监听来自本地主机的连接。如果您希望 Web 服务器监听来自远程主机的连接,您将使用主机的外部 IP 地址。

DocumentRoot 指令指定了构成网站页面的 HTML 文件的位置。该行不需要更改,因为它已经指向标准位置。该行应如下所示

DocumentRoot "/var/www/html"

Apache 安装 RPM 会创建 /var/www 目录树。如果您想更改网站文件存储的位置,则可以使用此配置项来完成。例如,您可能希望为 www 子目录使用不同的名称,以使网站的标识更加明确。它可能看起来像这样

DocumentRoot "/var/mywebsite/html"

这些是创建简单网站所需的唯一 Apache 配置更改。对于这个小练习,只对 httpd.conf 文件进行了一处更改——Listen 指令。其他一切都已配置为生成一个可工作的 Web 服务器。

但是,还需要进行另一项更改:在我们的防火墙中打开端口 80。我使用 iptables 作为我的防火墙,因此我更改 /etc/sysconfig/iptables 以添加一个允许 HTTP 协议的语句。整个文件看起来像这样

# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

我添加的行是倒数第三行,它允许端口 80 上的传入流量。现在我重新加载更改后的 iptables 配置。

[root@testvm1 ~]# cd /etc/sysconfig/ ; iptables-restore iptables

创建 index.html 文件

index.html 文件是 Web 服务器在您仅使用域名而不是特定的 HTML 文件名访问网站时将提供的默认文件。在 /var/www/html 目录中,创建一个名为 index.html 的文件。添加内容 Hello World。您无需添加任何 HTML 标记即可使其工作。Web 服务器的唯一工作是提供文本数据流,并且服务器不知道日期是什么或如何呈现它。它只是将数据流传输到请求主机。

保存文件后,将所有权设置为 apache.apache

[root@testvm1 html]# chown apache.apache index.html

启动 Apache

Apache 非常容易启动。当前版本的 Fedora 使用 systemd。运行以下命令以启动它,然后检查服务器的状态

[root@testvm1 ~]# systemctl start httpd
[root@testvm1 ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Thu 2018-02-08 13:18:54 EST; 5s ago
     Docs: man:httpd.service(8)
 Main PID: 27107 (httpd)
   Status: "Processing requests..."
    Tasks: 213 (limit: 4915)
   CGroup: /system.slice/httpd.service
           ├─27107 /usr/sbin/httpd -DFOREGROUND
           ├─27108 /usr/sbin/httpd -DFOREGROUND
           ├─27109 /usr/sbin/httpd -DFOREGROUND
           ├─27110 /usr/sbin/httpd -DFOREGROUND
           └─27111 /usr/sbin/httpd -DFOREGROUND

Feb 08 13:18:54 testvm1 systemd[1]: Starting The Apache HTTP Server...
Feb 08 13:18:54 testvm1 systemd[1]: Started The Apache HTTP Server.

在您的服务器上,命令可能有所不同。在使用 SystemV 启动脚本的 Linux 系统上,命令将是

[root@testvm1 ~]# service httpd start
Starting httpd: [Fri Feb 09 08:18:07 2018]          [  OK  ]
[root@testvm1 ~]# service httpd status
httpd (pid  14649) is running...

如果您的主机上安装了像 Firefox 或 Chrome 这样的 Web 浏览器,您可以使用浏览器 URL 行上的 URL localhost 来显示您的网页,就这么简单。您也可以使用像 Lynx 这样的文本模式 Web 浏览器来查看网页。首先,安装 Lynx(如果尚未安装)。

[root@testvm1 ~]# dnf -y install lynx

然后使用以下命令显示网页。

[root@testvm1 ~]# lynx localhost

结果在我的终端会话中看起来像这样。我删除了页面上的很多空白区域。

  Hello World

<snip>


Commands: Use arrow keys to move, '?' for help, 'q' to quit, '<-' to go back.
  Arrow keys: Up and Down to move.  Right to follow a link; Left to go back.
 H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search [delete]=history list

接下来,编辑您的 index.html 文件并添加一些 HTML 标记,使其看起来像这样

<h1>Hello World</h1>

现在刷新浏览器。对于 Lynx,使用组合键 Ctrl+R。结果看起来略有不同。文本是彩色的,这是 Lynx 在您的终端支持颜色时显示标题的方式,并且现在居中显示。在 GUI 浏览器中,文本将以大字体显示。

                                   Hello World

<snip>


Commands: Use arrow keys to move, '?' for help, 'q' to quit, '<-' to go back.
  Arrow keys: Up and Down to move.  Right to follow a link; Left to go back.
 H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search [delete]=history list

结束语

正如您从这个小练习中看到的那样,设置 Apache Web 服务器很容易。具体细节将因您的发行版和该发行版提供的 Apache 版本而异。在我的环境中,这是一个非常简单的练习。

但还有更多,因为 Apache 非常灵活和强大。下个月我将讨论使用单个 Apache 实例托管多个网站。

本文最初发表于 2018 年,并已由编辑更新。

标签
David Both
David Both 是一位开源软件和 GNU/Linux 倡导者、培训师、作家和演讲者。他自 1996 年以来一直从事 Linux 和开源软件工作,自 1969 年以来一直从事计算机工作。他是“系统管理员的 Linux 哲学”的坚定支持者和传播者。

2 条评论

我曾经设置过一个 Web 服务器并允许远程连接。如果您这样做,您必须确保学习关于连接的拒绝和允许设置。查看连接日志时,令人惊讶的是,您会立即成为试图使用特权登录您网站的人的目标。

感谢这篇文章,这是一个很好的复习 :)

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可。
© . All rights reserved.