介绍
Apache Web 服务器目前是世界上最受欢迎的 Web 服务器,它被用来服务各种类型的 Web 内容,是一个强大的应用程序,可高度定制。
许多人熟悉Apache 2.2配置语法,但一些发行版现在默认使用Apache 2.4。 这种过渡的例子是Ubuntu 14.04 LTS来自Ubuntu 12.04 LTS。
在本指南中,我们将讨论一些新的语法和一些你应该知道的其他变化,当你从Apache 2.2背景。
许可变更
Apache 2.4 所做的主要变化之一是用户授权的首选方式。
授权是指定身份验证用户可以做什么的指令,它列出了检查是否允许操作或访问的标准。
这与身份验证不同,必须首先发生。身份验证程序定义了用户如何能够积极地识别自己到服务器上。
首先,授权组件现在可以使用以前用于身份验证的要求
语法,从而创建了一个简单的方法来定义授权顺序,而不是依赖复杂的规则集。
例如,您可以为接受流量设置默认设置,但要阻止特定恶意用户,您可以添加这样的内容:
1Require all granted
2Require not ip 111.111.111.111
这将设置一个默认的政策,即接受所有人,然后指定一个资格,即请求不是来自111.111.111.111
的IP地址。
授权不仅可以根据用户或群组本身进行选择,还可以通过使用env
,host
或ip
或捕捉所有值all
来考虑其他因素。
- all: 此提供商匹配所有流量. 它有助于设置默认值
- env: 此测试是否设置环境变量
- 主机: 此测试用于测试连接客户端的主机名称
- ip: 此测试用于测试连接用户的 IP 地址
这些可以根据它们所指定的顺序进行控制,你通常会在这些特殊块中看到它们:
- RequireAll:必须满足区块中的所有授权要求以允许访问
- RequireAny:如果本区块中的任何授权要求都满足,则该区块被标记为满足
- RequireNone:如果列出的任何要求都成功,则指令将失败
这让您在如何设置授权方面有很大的灵活性,您可以像这样将这些指令块嵌入其中:
1<RequireAny>
2 <RequireAll>
3 Require user root
4 Require ip 123.123.123.123
5 </RequireAll>
6 <RequireAll>
7 <RequireAny>
8 Require group sysadmins
9 Require group useraccounts
10 Require user anthony
11 </RequireAny>
12 <RequireNone>
13 Require group restrictedadmin
14 Require host bad.host.com
15 </RequireNone>
16 </RequireAll>
17</RequireAny>
如你所看到的,我们可以定义一些相当复杂的授权路径. 上面的示例将授权用户是否根源,并来自IP 123.123.123.123
. 它还将授权名为antony
的用户或任何sysadmins
或useraccounts
组的成员,但只有他们不属于restrictedadmin
组或来自bad.host.com
上的标记主机。
这些身份验证块比用于访问控制的经典指令更容易理解。在过去的Apache版本中,你会使用命令
,允许
,拒绝
和满足
指令。
然而,它们已被移动到一个名为mod_access_compat
的单独模块中。如果您需要传统授权指令,请确保启用此模块。
Apache 中的其他更改
有各种其他变化,你应该知道,这将影响你如何构建配置文件。
其中一些可能需要你更改名称或取代新的默认值,这里有更多(完整列表)的更改,但我们将讨论一些可能带你上来的更改。
联系和儿童限制
一些指令已进行名称更改,以更好地描述其功能。
- MaxConnectionsPerChild:本指令被用来取代
MaxRequestsPerChild
。这个更改是为了更好地反映指令实际使用的用途。由于这些值实际上限制了连接的数量,这是该参数的更好的名称 - MaxRequestWorkers:本指令被创建以取代
MaxClients
选项。这是因为在非同步多处理模块中,客户端的数量不应该被认为与工人线条的数量相同。
允许变更
用于允许目录特定的配置文件更改默认设置的AllowOverride
指令发生了一些变化,可能会影响您的配置。
默认情况下,此设置的值现在是无
。这将允许您通过默认设置到更锁定状态来更容易地保护您的服务器. 仍然非常简单地指定.htaccess
文件应该在需要它的目录中读取和处理,但您应该需要更少的全球和大规模的AllowOverride None
声明才能实现这一点。
默认情况下锁定服务器,然后超越安全性以允许基于目录的设置的特定实例的策略是大多数用户已经做的。
默认文件更改
EnableSendfile
指令用于向客户端发送服务器上的文件,而无需读取内容,现在默认为关闭
。
这是一个安全措施,用于确保所涉及的系统正确支持操作。错误的实施可能是一个责任或可能导致操作失败。这些可能是操作系统特定的,取决于特定硬件,或因访问内容的方法(远程文件系统等)而不同。
默认将此指令禁用允许管理员验证其系统的兼容性,并在启用之前进行一些测试,以确保适当的功能。
实施细节
虽然这些并非完全针对Apache 2.4 版本,但在进行过渡时,一些默认配置文件已被更改。
其中一个例子是在 Debian 和 Ubuntu 版本中,Apache 2.4 的主要配置文件在 /etc/apache2/apache2.conf
现在处理包括额外的文件略有不同。
在2.2中,这些分布源于conf.d
和sites-enabled
目录中的任何文件,以允许额外的配置文件,最常用于虚拟主机规格。
1Include conf.d/
2Include sites-enabled/
Wildcard匹配是一种新的功能,允许您包含特定文件模式,而不是必须通过整个目录,这意味着,虽然传统上,您可以通过上面的一些东西,您可以通过使用更多的灵活性:
1Include conf.d/*.conf
2Include sites-enabled/*.conf
但是,如果您预计它将完全像以前一样工作,这种新的语法也可能导致一些问题。当使用与 wildcard 匹配时,包括
指令将失败,如果没有找到匹配的文件,从而导致错误。
为了绕过这一点,创建了一个名为IncludeOptional
的新指令,这完全是一样的,但如果 wildcard 不匹配任何文件,则不会导致失败。
为了利用这一点,一些发行版已经开始添加额外的目录:
1IncludeOptional conf-enabled/*.conf
2IncludeOptional sites-enabled/*.conf
正如你所看到的,这里已经添加了一个额外的实施调整:创建单独的conf-enabled
和conf-available
目录,以反映sites-*
和mods-*
目录。
这可能需要一些时间来习惯,如果你通常称你的 virtualhost 文件为默认
或site1.com
。然而,这提供了更大的灵活性,因为我们可以在目录中包含非配置文件,如旧版本,测试和 README 文件。
这意味着,为了测试,你可以简单地做一些事情,如:
1cd /etc/apache2/sites-enabled/
2cp mainconfig.conf mainconfig.conf.bak
3nano mainconfig.conf
虽然你可以通过a2dissite
和a2ensite
操作,但这是一种额外的方法,对一些人来说可能更自然。
您可能在配置中注意到的另一个变化是,一些指令已经移动,一些默认的 virtualhost 指令已经改变了,过去在默认 virtualhost 文件中存在的这三个块不再存在:
1<Directory />
2 Options FollowSymLinks
3 AllowOverride None
4</Directory>
5<Directory /var/www/>
6 Options Indexes FollowSymLinks MultiViews
7 AllowOverride None
8 Order allow,deny
9 allow from all
10</Directory>
11
12ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
13<Directory "/usr/lib/cgi-bin">
14 AllowOverride None
15 Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
16 Order allow,deny
17 Allow from all
18</Directory>
在Ubuntu的最新版本中,前两块块现在在apache2.conf文件中实现,因为它们应该在任何配置中设置。
1<Directory />
2 Options FollowSymLinks
3 AllowOverride None
4 Require all denied
5</Directory>
6<Directory /var/www/>
7 Options Indexes FollowSymLinks
8 AllowOverride None
9 Require all granted
10</Directory>
cig-bin
目录规格已从 virtualhost 文件中删除,并在 conf-available/serve-cgi-bin.conf
文件中实现. 这是一个更模块化的方法,并让 virtualhost 文件只负责唯一的指令。
1<VirtualHost *:80>
2 ServerAdmin webmaster@localhost
3 DocumentRoot /var/www
4 ErrorLog ${APACHE_LOG_DIR}/error.log
5 CustomLog ${APACHE_LOG_DIR}/access.log combined
6</VirtualHost>
正如你所看到的,这真的可以帮助我们对配我们的网站特定的配置文件。
结论
通过审核现有配置并更新某些程序以利用新指令和最佳做法,迁移到Apache 2.4并不太困难。