在这篇文章中,我们将要看一下通过 apt-get 安装的 apache 在 ubuntu 上的配置文件放置位置和简短功能介绍。

Apache HTTP Server

apache 配置文件目录

我们看一下 apache 从那里获取配置信息,如果你通过 Ubuntu Apache 快速上手指南 - 安装 Apache 安装了 apache,你会发现 apache 配置文件的根目录:

/etc/apache2/

如果你通过源代码来编译 apache,配置文件的位置会有所不同,配置文件的目录位置取决于你安装时指定的,可能在 /usr/local,注意 apache 的文档中描述的配置文件目录是基于源代码安装的方式,本文中是根据 apt-get 安装的方式来描述的配置文件目录。

查看一下配置文件目录中的内容:

$ ls /etc/apache2

你会看到下面的信息:

Apache Configuration Files

我们会从浏览核心配置文件 apache2.conf 开始。

主配置文件

apache 启动读取的第一个配置文件:

/etc/apache2/apache2.conf

这个文件的注释很完整,你可以浏览一下文件的内容,了解下默认配置是什么样的,你能怎么进行修改,在后面的文章中会描述其中重要的,现在可以忽略掉。

现在需要关注一个重要的指令 Include。

Include 指令

我们可以把所有的配置内容硬塞进主配置文件,但是每次打开这样一个巨大的文件再做一点修改会显得很笨拙,所以 apache 团队提供了一种添加其他配置文件的方法。

Include 指令 告诉 apache 读取另外一个配置并解析作为配置选项,同样,可以指向一个目录,告诉 apache 读取目录中的所有文件,每次添加一个新的站点,不需要修改巨大的文件。

为什么现在要介绍这个指令?我会指出主配置文件中通过 Include 指令会读取的文件和目录,你会明白附加的配置文件怎么被使用的,你才知道如何放置自己的配置文件。

我们来看看会用到那些附加配置文件

conf.d

Include /etc/apache2/conf.d/

conf.d 目录放置的是通常的片段语句,你可以看一下,我们安装 apache 的时候,想设置 ServerName 指令,我们不是修改的主配置文件,而是在 conf.d 下创建了一个新文件来写 ServerName 指令。

当想往 apache 中添加指令而又不知道放在那里时,可以考虑放在 conf.d 下的新建文件中,避免修改主配置文件,使用 conf.d 可以轻松隔离最新配置修改信息(查看修改时间),让你快速找到添加的指令,从而避免把主配置文件改坏了的风险。

ports.conf

Include /etc/apache2/ports.conf

ports.conf 文件包含指令告诉 apache 监听 80 端口(默认HTTP通信端口)和 443 端口(SSL支持)。

如果你想 apache 监听其他端口,只需添加更多的 Listen 指令。

sites-available

默认情况下 sites-available 目录中只有一个文件 default,这个文件包含设置一个默认站点的指令,如文档根目录和目录权限这些。

我们会在后面讨论添加虚拟主机,default 文件对于添加站点到 web 服务是一个好的示例。

你已经注意到我并没有列出指向 sites-available 的 Include 指令,这是因为没有这样的配置,apache 不会查看这个目录,而是另外一个相似的目录…

sites-enabled

Include /etc/apache2/sites-enabled/

apache 主配置文件中包含了 sites-enabled 目录,而不是 sites-available 目录,目录名称应该表明了这样做的原因:在 sites-enabled 目录中软链接有指向 sites-available 目录中的配置文件时,一个站点才算激活(可以通过浏览器访问)。

默认情况 sites-enabled 目录中一个软链接指向 sites-available 目录中 default 配置文件,软连接 default 前面的 000 是为了保证这是默认站点,apache 读取配置文件根据文件名的字母顺序,前面加 000 就保证了这是 apache 最先读取的配置文件。

为什么需要默认站点配置?因为,当我们说到虚拟主机时,某人通过 www.example.com 访问你的 web 服务,你有一个针对 www.example.com 站点配置文件,apache 会使用这个配置文件,如果它找不到可以匹配域名的配置文件,它就会使用默认的站点配置。

通过 apache 特定的命令来激活和停止站点配置非常的方便。

a2ensite 和 a2dissite 命令

a2ensite 和 a2dissite 两个命令控制站点从失效到激活状态之间的转换。

先在浏览器里访问你的默认站点,看到 “It works!”。现在运行命令停止默认站点:

$ sudo /usr/sbin/a2dissite default

重启apache会重新读取配置文件:

$ sudo /usr/sbin/apache2ctl graceful

再次访问站点,你会看到 Not found 的错误,因为你停止了默认站点,apache 不知道怎么处理,你可以再看一下 sites-enabled 目录中指向 default 配置的软连接不见了。

重激活默认站点,再次运行 a2ensite 和 reload apache:

$ sudo /usr/sbin/a2ensite default
$ sudo /usr/sbin/apache2ctl graceful

现在通过浏览器访问站点又可以看到 It works! ,sites-enabled 目录中软连接也再次出现。

a2ensite 和 a2dissite 两个命令来管理站点很有用,同样也可以用来处理站点维护的问题,比如,你可以定义个站点配置来处理站点维护中,访问者看到就是这个取代主站点的页面,只需要停止主站点配置文件,激活维护站点配置文件,当你完成主站点升级的工作,再重新激活主站点配置文件,停止维护站点配置文件,重启加载 apache。

a2enmod 和 a2dismod 命令

a2enmod 和 a2dismod 命令工作方式同 a2ensite 和 a2dissite 两个命令,只是它们操作的是模块的配置文件,而不是站点的配置文件。

如果,你想激活 userdir 模块(此模块允许 apache 将用户主目录作为站点暴露出来),你可以运行:

$ sudo /usr/sbin/a2enmod userdir

同样,如果你不想使用 status 模块(可以在页面上查看 apache 服务的状态),你可以这样停止:

$ sudo /usr/sbin/a2dismod status

如果你改变了模块的加载,记得要重新加载或重启 apache 来使改变有效。

envvars

文件中包含一些 apache 脚本使用的环境变量,如 apache2ctl,当你改变了 apache 运行的用户和组时才需要修改此文件。

httpd.conf

Include /etc/apache2/httpd.conf

如果从源代码编译的 apache,主配置文件就是 httpd.conf,使用 apache2.conf 作为主配置文件是 ubuntu 包维护者做的更人性化的改动,httpd.conf 以防有的应用试图修改默认的 apache 配置文件。

默认情况下 httpd.conf 文件的内容是空的。