25.7 Apache HTTP 服务器

Contributed by Murray Stokely.

25.7.1 纵览

  FreeBSD 被用于运行许多全球最为繁忙的 web 站点。 大多数 Internet 上的 web 服务器, 都使用 Apache HTTP 服务器Apache 软件包可以在您的 FreeBSD 安装盘上找到。 如果没有在首次安装时附带安装 Apache, 则可以通过 www/apache13www/apache20 port 来安装。

  一旦成功地安装了 Apache, 就必须对其进行配置。

注意: 这一节介绍了 1.3.X 版本的 Apache HTTP 服务器 的配置, 因为它是随 FreeBSD 一同使用的最多的版本。 Apache 2.X 引入了很多新技术, 但在此并不讨论。 要了解关于 Apache 2.X 的更多资料, 请参见 http://httpd.apache.org/

25.7.2 配置

  主要的 Apache HTTP Server 配置文件, 在 FreeBSD 上会安装为 /usr/local/etc/apache/httpd.conf。 这是一个典型的 UNIX® 文本配置文件, 它使用 # 作为注释符。 关于全部配置选项的详尽介绍超出了本书的范围, 这里将只介绍最常被修改的那些。

ServerRoot "/usr/local"

这指定了 Apache 安装的顶级目录。 执行文件被放到服务器根目录 (server root) 的 binsbin 子目录中, 而配置文件则位于 etc/apache

ServerAdmin [email protected]

这个地址是在服务器发生问题时应发送电子邮件的地址, 它会出现在服务器生成的页面上, 例如错误页面。

ServerName www.example.com

ServerName 允许您配置发送回客户端的主机名, 如果您的服务器被用户以别的名字访问 (例如, 使用 www 而不是主机本身的真实名字)。

DocumentRoot "/usr/local/www/data"

DocumentRoot: 这个目录是您的文档所在的目录。 默认情况下, 所有的请求都会从这个位置去获取, 但也可以通过符号连接和别名指定其它的位置。

  在修改配置之前备份 Apache 的配置文件永远是一个好习惯。 一旦对初始配置满意了, 就可以开始运行 Apache 了。

25.7.3 运行 Apache

  与许多其它网络服务不同, Apache 并不依赖 inetd 超级服务器来运行。 一般情况下会把它配置为一个独立的服务器, 以期在客户的 web 浏览器连入 HTTP 请求时, 能够获得更好的性能。 它提供了一个 shell 脚本来使启动、 停止和重新启动服务器变得尽可能地简单。 首次启动 Apache, 只需执行:

# /usr/local/sbin/apachectl start

  可以在任何时候使用下面的命令来停止服务:

# /usr/local/sbin/apachectl stop

  当由于某种原因修改了配置文件之后, 需要重启服务器:

# /usr/local/sbin/apachectl restart

  要在重启 Apache 服务器时不中断当前的连接, 则应运行:

# /usr/local/sbin/apachectl graceful

  更多的信息, 可以在 apachectl(8) 联机手册中找到。

  要在系统启动时启动 Apache, 则应在 /etc/rc.conf 中加入:

apache_enable="YES"

  如果您希望在系统引导时启动 Apache httpd 程序并指定其它一些选项, 则可以把下面的行加到 rc.conf

apache_flags=""

  现在 web 服务器就开始运行了, 您可以使用 web 浏览器打开 http://localhost/。 默认显示的 web 页面是 /usr/local/www/data/index.html

25.7.4 虚拟主机

  Apache 支持两种不同类型的虚拟主机。 第一种方法是基于名字的虚拟主机。 基于名字的虚拟主机使用客户机发来的 HTTP/1.1 头来辨别主机名。 这使得不同的域得以共享同一个 IP 地址。

  要配置 Apache 来使用基于名字的虚拟主机, 需要把类似下面的项加到您的 httpd.conf 中:

NameVirtualHost *

  如果您的 web 服务器的名字是 www.domain.tld, 而您希望建立一个 www.someotherdomain.tld 的虚拟域, 则应在 httpd.conf 中加入:

<VirtualHost *>
ServerName www.domain.tld
DocumentRoot /www/domain.tld
</VirtualHost>

<VirtualHost *>
ServerName www.someotherdomain.tld
DocumentRoot /www/someotherdomain.tld
</VirtualHost>

  您需要把上面的地址和文档路径改为所使用的那些。

  要了解关于虚拟主机的更多信息, 请参考官方的 Apache 文档, 这些文档可以在 http://httpd.apache.org/docs/vhosts/ 找到。

25.7.5 Apache 模块

  有许多不同的 Apache 模块, 它们可以在基本的服务器基础上提供许多附加的功能。 FreeBSD 的 Ports Collection 为安装 Apache 和常用的附加模块提供了非常方便的方法。

25.7.5.1 mod_ssl

  mod_ssl 这个模块使用 OpenSSL 库, 来提供通过 安全套接字层 (SSL v2/v3) 和 传输层安全 (TLS v1) 协议的强加密能力。 这个模块提供了从某一受信的证书签署机构申请签名证书所需的所有工具, 您可以藉此在 FreeBSD 上运行安全的 web 服务器。

  如果您未曾安装 Apache, 也可以直接安装一份包含了 mod_ssl 的版本的 Apache 1.3.X, 其方法是通过 www/apache13-modssl port 来进行。 SSL 支持已经作为 Apache 2.X 的一部分提供, 您可以通过 www/apache20 port 来安装后者。

25.7.5.2 使用 Perl & PHP 的动态网站

  在过去几年中, 越来越多的企业开始通过 Internet 以期扩大它们的收入和影响。 这也为交互式 web 内容提出了更多的要求。 尽管一些公司, 如 Microsoft®, 提供了基于它们专有产品的解决方案, 但开源社区也给出了自己的答案。 目前, 最为常用的动态 web 内容实现两种方法是 mod_perl & mod_php

25.7.5.2.1 mod_perl

  Apache/Perl 集成计划, 将 Perl 程序设计语言的强大功能, 与 Apache HTTP 服务器 紧密地结合到了一起。 通过 mod_perl 模块, 可以完全使用 Perl 来撰写 Apache 模块。 此外, 服务器中嵌入的持久性解释器, 消除了由于启动外部的解释器为 Perl 脚本的启动所造成的性能损失。

  mod_perl 通过多种方式提供。 要使用 mod_perl, 应该注意 mod_perl 1.0 只能配合 Apache 1.3 而 mod_perl 2.0 只能配合 Apache 2 使用。 mod_perl 1.0 可以通过 www/mod_perl 安装, 而以静态方式联编的版本, 则可以通过 www/apache13-modperl 来安装。 mod_perl 2.0 则可以通过 www/mod_perl2 安装。

25.7.5.2.2 mod_php

Written by Tom Rhodes.

  PHP, 也称为 “PHP: Hypertext Preprocessor”, 是一种通用的脚本语言, 并且特别适合于 Web 开发。 它能够很容易地嵌入到 HTML 之中, 其语法接近于 C、 Java™, 以及 Perl, 以期让 web 开发人员的一迅速撰写动态生成的页面。

  要获得用于 Apache web 服务器的 PHP5 支持, 可以从安装 www/mod_php5 port 开始。

  上述操作将安装并配置用于支持动态 PHP 应用程序所需的模块。 请检查并确认在 /usr/local/etc/apache/httpd.conf 中已经加入了下面的小节:

LoadModule php5_module        libexec/apache/libphp5.so
AddModule mod_php5.c
    <IfModule mod_php5.c>
        DirectoryIndex index.php index.html
    </IfModule>
    <IfModule mod_php5.c>
        AddType application/x-httpd-php .php
        AddType application/x-httpd-php-source .phps
    </IfModule>

  这些工作完成之后, 还需要使用 apachectl 命令来完成一次 graceful restart 以便加载 PHP 模块:

# apachectl graceful

  在 FreeBSD 中的 PHP 支持是高度模块化的, 因此基本安装的功能十分有限。 增加其他功能的支持非常简单, 只需通过 lang/php5-extensions port 即可完成。 这个 port 提供了一个菜单驱动的界面来帮助完成 PHP 扩展的安装。 另外, 也可以通过对应的 port 来单独安装扩展。

  例如, 要将对于 MySQL 数据库服务器的支持加入 PHP5, 只需简单地安装 databases/php5-mysql port。

  安装完扩展之后, 必须重新启动 Apache 服务器, 来令其适应新的配置变更:

# apachectl graceful

本文档和其它文档可从这里下载:ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读文档,如不能解决再联系<[email protected]>.
关于本文档的问题请发信联系 <[email protected]>.