快速搭建内网 Web 服务器

作者:Russell C. Pavlicek

在最近的一个项目中,我正忙于我的 Linux 工作站,而附近的一位同事正试图在一个流行的操作系统上安装一个知名的 Web 服务器。随着时间的推移,他的挫败感越来越强。到一天结束时,他已经使大部分 Web 服务器正常运行,但在配置某些部分时仍然遇到困难。

这是一位拥有公认技术能力的人,为了为一个项目建立一个内网 Web 服务器而奋斗。这显然不是一项简单的任务。通过坚韧不拔的决心,我的朋友最终成功了,但并非没有在这个过程中增添几根白发。

我开始反思自己使用 Web 服务器的经验。我正在使用的不起眼的 Linux 工作站(一台配备 16 MB 内存和 0.5 GB SCSI 驱动器的 486/66)配备了 Apache Web 服务器。六个月前,我用我们实验室周围的旧零件组装了这台系统,并在其上安装了 Red Hat 4.2。当我组装这台机器时,我希望向我的同事们展示 Linux 已经变得多么令人印象深刻和重要。

我没有想到的是,由于我朋友的经历,我发现自己对 Linux 和 Apache 更加印象深刻。

当我在机器上安装 Red Hat 4.2 时,我只是简单地指定我想要安装 Apache Web 服务器以及我选择的其他软件包。当安装完成后,我只需将浏览器指向新安装的机器,就发现一个友好的 Red Hat 提供的网页正对着我,告诉我应该编辑哪个文件才能开始将内容加载到我的新网站中。

无需摆弄参数或复杂的配置。我只是开始编辑默认的 HTML 文件,很快就拥有了一个简洁的网站,展示了 Linux 的优势。

为什么需要内网 Web 服务器?

随着全球公司竞相赶上互联网浪潮,越来越多的公司意识到需要建立一个像样的内网,以便在组织内部共享信息。传统的纸质文档,例如政策手册、软件文档、设计规范、新闻稿和公司公告,突然之间可以通过内网 Web 服务器在组织内部更容易访问。诸如支持讨论、文档搜索以及音频和视频档案等新功能正在创造机会,以提高信息的可用性并增加组织的竞争优势。

在许多这些技术的中心是需要一个强大而高效的内网 Web 服务器。然而,即使是对用于开发有效服务器的商业软件解决方案进行粗略的浏览,也会发现构建一个服务器可能是一项昂贵的提议。

这里是 Linux 和 Apache 大放异彩的地方!强大的 Linux 操作系统与行业领先的 Apache Web 服务器(参见“资源”)的结合,为低成本、高功能的内网网站创建了灵活的基础。使用 Linux 解决业务问题是说服人们相信此操作系统可以在企业领域占据一席之地的最佳方法之一。

当然,Linux 和 Apache 也可以配置为高效的互联网 Web 服务器。互联网服务器需要一个好的内网服务器的所有要素,以及更多。特别是,安全性和性能在互联网场景中通常更为关键。但是,将 Web 服务器安装到不太恶劣的内部网络中的问题可以轻松解决,特别是如果您使用的是 Linux 发行版,它可以为您完成大部分工作。

如果您的 Linux 发行版没有预配置 Apache 怎么办?好消息是,在大多数 Linux 机器上安装 Apache 并不需要太多操作。只需几分钟即可在您的内网上设置一个可用的 Web 服务器,而无需成为技术专家。

如何安装

使用 Red Hat 4.2、Debian 1.3.1 或 OpenLinux Base 1.x 安装 Apache 非常简单。Debian 发行版会经历一个简短的配置对话框(如果不确定,只需按几次 ENTER 键),而 Red Hat 和 OpenLinux 发行版则具有或多或少预配置的安装。在所有三个发行版中,创建可用的内网服务器的过程既不需要经验,也不需要大量时间。

如果您的发行版没有 Apache 软件包,您可以随时从 https://apache.ac.cn/ 获取源代码工具包。以下是快速解压缩和构建程序的示例(使用 Apache 1.2.5)

tar xzf apache_1.2.5.tar.gz
cd apache_1.2.5/src/
./Configure

如果您有不同于默认位置 /usr/local/etc/apache/conf/ 的位置来存储配置文件,只需更改 src/httpd.h 中的以下行

#define HTTPD_ROOT "/etc/httpd"
请注意,HTTPD_ROOT 的定义包含结尾斜杠。如果您没有在文件中进行更改,但仍想移动配置文件,您将可以通过在 httpd 命令行中使用 -f 选项来指定 httpd.conf 的位置。

无论您是否决定进行上述更改,最后一步都是编译 Web 服务器。只需键入 make,httpd 可执行文件将在 /src 子目录中创建。如果您希望执行任何特殊操作,源代码工具包在 README 和 src/INSTALL 中包含其他说明。对于大多数情况,普通的编译应该可以正常工作。

如何配置

Apache 有许多出色的配置选项可用。对于从未管理过 Web 服务器的人来说,选项列表可能看起来相当令人生畏。但是,可以使用简单的烹饪书方法来快速启动并运行您的 Web 服务器。以下值将生成一个可用的内网服务器,该服务器应在大多数组织中出色地运行。当然,如果您有特殊的安全要求,那么查看 Apache 文档会非常有帮助。

任何易于安装 Apache 的 Linux 发行版都可能已经启用了一组合理的参数。即使您的 Web 服务器在安装后几秒钟内就已启动并运行,您可能也需要查看配置文件,以了解默认情况下已启用和禁用了哪些功能。

Apache 配置通常有四个值得注意的文件。在 Red Hat 中,这些文件位于 /etc/httpd/conf/ 中。在 Debian 中,它们位于 /etc/apache/ 中。如果您按照上述说明从源代码构建了 Apache,则它们应位于 /usr/local/etc/apache/conf/ 中。这四个文件是 access.conf、httpd.conf、srm.conf 和 mime.types。

如果在您的工具包中找不到这些文件,您应该能够找到名称以 .conf-dist 结尾的同一组文件。只需将这些文件中的每一个复制到适当的位置(例如,如果您使用的是 Red Hat,则为 /etc/httpd/conf/),使用 .conf 文件类型,然后编辑这些文件,使其包含下面描述的参数。请注意,Apache 提供的配置文件包含此处为节省空间而未显示的有用提示,以及此处未讨论的许多其他参数。因此,最好编辑文件以包含以下参数,而不是尝试从头开始构建新的配置文件。

在四个文件中,mime.types 是最不可能需要修改的文件。它是一个将 MIME 标头与文件类型关联的表。例如,该表将说明以 .gz 结尾的文件应生成 application/x-gzip 的 MIME 标头。

最有可能需要进行参数调整的是访问配置定义。在 access.conf 中,尝试使用以下值

<Directory /home/httpd/html>
Options Indexes Includes ExecCGI FollowSymLinks
AllowOverride None
order allow,deny
allow from all
</Directory>

在这个从修改后的 Red Hat 文件中提取的示例中,此条目表示此服务器的主要 HTML 文件将存储在 /home/httpd/html 中。选项包括

  • Indexes:如果用户指定的 URL 指向目录名称而不是文件名,并且该目录不包含索引文件(例如 index.html),则 Apache 将显示指定目录中包含的文件列表。如果您不希望出现此行为,只需从“Options”行中省略“Indexes”关键字即可。

  • Includes:这允许服务器包含指定的文件。

  • ExecCGI:如果指定的 URL 实际上是 CGI 脚本,这将允许该脚本执行。如果您对 CGI 脚本不感兴趣,请不要包含此关键字。

  • FollowSymLinks:假设我在此目录中创建了指向我的 CD 驱动器的符号链接。此关键字将指示 Apache 允许访问该 CD,就像它是此目录的子目录一样。如果您希望提供 CD 的内容或允许访问通常位于诸如 /usr/doc 之类的树中的 HOWTO,则此功能可能非常方便。一个快速的符号链接,您就可以允许 Apache 提供这些文件,而无需移动它们或创建单独的符号链接。但请记住谨慎创建符号链接,否则您可能会发现您的网站正在提供您从未打算普遍提供的文档。

在上面的示例中,其余指令(大致)转换为“不要覆盖正常的访问规则”、“在允许访问的规则之前评估拒绝访问的规则”和“允许来自所有主机的访问”。总之,这些规则加起来就是“如果它在那里,并且他们礼貌地请求,就给他们”。

CGI 目录条目通常看起来更简洁,例如

<Directory /home/httpd/cgi-bin>
AllowOverride None
Options None
</Directory>

httpd.conf 中定义 Apache 守护程序操作参数的参数如下

HostnameLookups on
如果 HostnameLookups 为“on”,服务器将使用 DNS 尝试确定用户的用于日志记录的主机名。
User nobody
Group nobody
UserGroup 确定远程用户的访问权限。服务器的行为就像它是指定用户和组(在本例中为“nobody”)创建的作业一样。
ServerAdmin root@localhost
ServerAdmin 设置用户名和主机,以接收守护程序可能生成的邮件消息。
ServerRoot /etc/httpd
ServerRoot 设置配置和日志文件的基本目录。
ErrorLog logs/error_log
TransferLog logs/access_log
RefererLog logs/referer_log
AgentLog logs/agent_log
这些参数指定各种日志文件的名称和位置。指定的目录相对于 ServerRoot 目录。一旦您运行 Apache 一段时间,请检查这些日志文件。在其中,您会找到有关何时何人访问了哪些页面的信息。您甚至会找到有关调用您页面的页面以及用户用于查看您网站的浏览器类型的信息。
MinSpareServers 5
MaxSpareServers 10
StartServers 5
MaxClients 150
这些参数处理 Apache 在需要之前生成子进程 之前 以处理任何传入流量突然增加的事实。这些参数指定在任何时间点应存在的最小和最大未使用子进程数。它们还指定应可用的绝对最小和最大子进程数。使用命令 ps ax 将显示 Apache 守护程序当前正在使用的多个子进程。

srm.conf 文件包含许多不同的项目。它主要处理服务器的命名空间以及服务器如何响应请求。特别感兴趣的是以下行

DocumentRoot /home/httpd/html
Alias /icons/ /home/httpd/icons/
ScriptAlias /cgi-bin/ /home/httpd/cgi-bin/
UserDir public_html

DocumentRoot 指定包含要提供的页面的目录树的顶部。Alias 允许使用别名访问指定的目录,即使它不在 DocumentRoot 树下。ScriptAlias 类似于 Alias,不同之处在于该目录将包含 CGI 脚本。UserDir 指定用户的子目录,以查找任何使用 /~username/ 规范的 URL。例如,如果用户的默认目录通常是 /home/username/,则用户的默认 HTML 目录将是 /home/username/public_html/。

结论

Linux 和 Apache Web 服务器的结合是构建强大内网 Web 服务器的快速且廉价的方法。尽管 Apache 具有多种选项,但可以快速配置它以满足大多数组织的需求。实际上,大多数当前的 Linux 发行版都预装了 Apache 并已准备就绪。如果您的需求变得更加复杂,Apache 可以与您一起成长以完成这项工作。

资源

The Quick Road to an Intranet Web Server
Russell C. Pavlicek 受雇于 Digital Equipment Corporation,担任软件顾问,为华盛顿特区地区的美国联邦政府客户提供服务。他与他可爱的妻子和可爱的孩子住在马里兰州农村,在那里他们侍奉 Yeshua 并被各种毛茸茸的生物包围。在他极少的空闲时间里,他继续在 http://www.geocities.com/SiliconValley/Haven/6087/ 开发 Corporate Linux Advocate 主页。他的观点完全是他自己的(但如果您礼貌地询问,他会允许您采纳一两个观点)。可以通过 pavlicek@altavista.net 与他联系。
加载 Disqus 评论