# Apache模块 mod_authz_host
| [说明](#calibre_link-11) | 提供基于主机名、IP地址、请求特征的访问控制 |
| --- | --- |
| [状态](#calibre_link-12) | 基本(B) |
| [模块名](#calibre_link-13) | authz_host_module |
| [源文件](#calibre_link-14) | mod_authz_host.c |
| [兼容性](#calibre_link-58) | 仅在 Apache 2.1 及以后的版本中可用 |
### 概述
`mod_authz_host`提供的指令用在`<Directory>`, `<Files>`, `<Location>`段中,也用于`.htaccess`文件中控制对服务器特定部分的访问。只要能在[环境变量](#calibre_link-232)中捕获到主机名、IP地址或其他的客户端请求特征,就可以基于这些特征对访问进行控制。`Allow`和`Deny`指令用于指出允许哪些客户及不允许哪些客户访问服务器,而`Order`指令设置默认的访问状态并配置`Allow`和`Deny`指令怎样相互作用。
基于主机的访问控制和基于口令的身份验证两套机制可以同时实现。在这种情况下,`Satisfy`指令用来决定两套机制如何相互作用。
一般来说,访问控制指令适用于所有的访问方法(`GET`, `PUT`, `POST`等)。在多数情况下这是一个被期望的特性。但是,只限制某些方法而对其他方法不加限制也是可能的:通过把指令放到一个`<Limit>`段中即可。
## Allow 指令
| [说明](#calibre_link-18) | 控制哪些主机能够访问服务器的该区域 |
| --- | --- |
| [语法](#calibre_link-19) | `Allow from all|host|env=env-variable [host|env=env-variable] ...` |
| [作用域](#calibre_link-20) | directory, .htaccess |
| [覆盖项](#calibre_link-66) | Limit |
| [状态](#calibre_link-21) | 基本(B) |
| [模块](#calibre_link-22) | mod_authz_host |
`Allow`指令控制哪些主机可以访问服务器的该区域。可以根据主机名、IP地址、 IP地址范围或其他环境变量中捕获的客户端请求特性进行控制。
这个指令的第一个参数总是"`from`",随后的参数可以有三种不同形式:如果指定"`Allow from all`",则允许所有主机访问,按照下述`Deny`和`Order`指令的配置。若要只允许特定的主机或主机群访问服务器,_host_可以用下面任何一种格式来指定:
一个(部分)域名
### 示例:
```
Allow from apache.org
Allow from .net example.edu
```
主机名与给定字符串匹配或者以给定字符串结尾的主机允许访问。只有完整的名字组成部分才被匹配,因此上述例子将匹配`foo.apache.org`但不能匹配`fooapache.org` 。这样的配置将导致Apache不管`HostnameLookups`指令是如何设置的,对一个对客户IP地址都要执行两次DNS查询:一次正查询保证IP没有伪造,一次反查询保证主机名没有伪造。只有两次查询的结果都吻合,并且主机名能够被匹配,访问才被允许。
完整的IP地址
### 示例:
```
Allow from 10.1.2.3
Allow from 192.168.1.104 192.168.1.205
```
允许拥有这些IP地址的主机进行访问。
部分IP地址
### 示例:
```
Allow from 10.1
Allow from 10 172.20 192.168.2
```
IP地址的开始1到3个字节,用于子网限制。
网络/掩码对
### 示例:
```
Allow from 10.1.0.0/255.255.0.0
```
一个网络"a.b.c.d"和一个掩码"w.x.y.z",用于更精确的子网限制。
网络/nnn无类别域间路由规格(CIDR specification)
### 示例:
```
Allow from 10.1.0.0/16
```
同前一种情况相似,除了掩码由nnn个高位字节构成。
注意以上例子中的后三个匹配完全相同的一组主机。
IPv6地址和IPv6子网可以像下面这样指定:
```
Allow from 2001:db8::a00:20ff:fea7:ccea
Allow from 2001:db8::a00:20ff:fea7:ccea/10
```
`Allow`指令的第三种参数格式允许对服务器的访问由[环境变量](#calibre_link-232)的一个扩展指定。指定"`Allow from env=env-variable`"时,如果环境变量env-variable存在则访问被允许。使用由`mod_setenvif`提供的指令,服务器用一种基于客户端请求的弹性方式提供了设置环境变量的能力。因此,这条指令可以用于允许基于像`User-Agent`(浏览器类型)、`Referer`或其他HTTP请求头字段的访问。
### 示例:
```
SetEnvIf User-Agent ^KnockKnock/2\.0 let_me_in
<Directory /docroot>
Order Deny,Allow
Deny from all
Allow from env=let_me_in
</Directory>
```
这种情况下,发送以`KnockKnock/2.0`开头的用户代理标示的浏览器将被允许访问,而所有其他浏览器将被禁止访问。
## Deny 指令
| [说明](#calibre_link-18) | 控制哪些主机被禁止访问服务器 |
| --- | --- |
| [语法](#calibre_link-19) | `Deny from all|host|env=env-variable [host|env=env-variable] ...` |
| [作用域](#calibre_link-20) | directory, .htaccess |
| [覆盖项](#calibre_link-66) | Limit |
| [状态](#calibre_link-21) | 基本(B) |
| [模块](#calibre_link-22) | mod_authz_host |
这条指令允许基于主机名、IP地址或者环境变量限制对服务器的访问。`Deny`指令的参数设置和`Allow`指令完全相同。
## Order 指令
| [说明](#calibre_link-18) | 控制默认的访问状态与`Allow`和`Deny`指令生效的顺序 |
| --- | --- |
| [语法](#calibre_link-19) | `Order ordering` |
| [默认值](#calibre_link-24) | `Order Deny,Allow` |
| [作用域](#calibre_link-20) | directory, .htaccess |
| [覆盖项](#calibre_link-66) | Limit |
| [状态](#calibre_link-21) | 基本(B) |
| [模块](#calibre_link-22) | mod_authz_host |
`Order`指令控制默认的访问状态与`Allow`和`Deny`指令生效的顺序。Ordering取值范围是以下几种范例之一:
`Deny,Allow`
`Deny`指令在`Allow`指令之前被评估。**默认允许所有访问**。任何不匹配`Deny`指令或者匹配`Allow`指令的客户都被允许访问。
`Allow,Deny`
`Allow`指令在`Deny`指令之前被评估。**默认拒绝所有访问**。任何不匹配`Allow`指令或者匹配`Deny`指令的客户都将被禁止访问。
`Mutual-failure`
只有出现在`Allow`列表并且不出现在`Deny`列表中的主机才被允许访问。这种顺序与"`Order Allow,Deny`"具有同样效果,不赞成使用。
关键字只能用逗号分隔;它们之间**不能有空格**。注意在所有情况下每个`Allow`和`Deny`指令语句都将被评估。
在下面的例子中,apache.org域中所有主机都允许访问,而其他任何主机的访问都将被拒绝。
```
Order Deny,Allow
Deny from all
Allow from apache.org
```
下面例子中,apache.org域中所有主机,除了foo.apache.org子域包含的主机被拒绝以外,其他都允许访问。而所有不在apache.org域中的主机都不允许访问,因为默认状态是拒绝对服务器的访问。
```
Order Allow,Deny
Allow from apache.org
Deny from foo.apache.org
```
另一方面,如果上个例子中的`Order`指令改变为"`Deny,Allow`",将允许所有主机的访问。这是因为,不管配置文件中指令的实际顺序如何,"`Allow from apache.org`"指令会最后被评估到并覆盖之前的"`Deny from foo.apache.org`"。所有不在`apache.org`域中的主机也允许访问是因为默认状态被改变到了_允许_。
即使没有伴随`Allow`和`Deny`指令,一个`Order`指令的存在也会影响到服务器上某一个部分的访问,这是由于它对默认访问状态的影响。例如:
```
<Directory /www>
Order Allow,Deny
</Directory>
```
这样将会禁止所有对`/www`目录的访问,因为默认状态将被设置为_拒绝_。
`Order`指令只在服务器配置的每个段内部控制访问指令的处理。这暗示着,例如,一个在`<Location>`段中出现的`Allow`或`Deny`指令总是将会在一个`<Directory>`段或者`.htaccess`文件中出现的`Allow`或`Deny`指令之后被评估,而不管`Order`指令如何设置。要了解配置段落合并的详细信息,参见[配置段](#calibre_link-256)文档。
- Apache HTTP Server Version 2.2 文档 [最后更新:2006年3月21日]
- 版本说明
- 从1.3升级到2.0
- 从2.0升级到2.2
- Apache 2.2 新特性概述
- Apache 2.0 新特性概述
- The Apache License, Version 2.0
- 参考手册
- 编译与安装
- 启动Apache
- 停止和重启
- 配置文件
- 配置段(容器)
- 缓冲指南
- 服务器全局配置
- 日志文件
- 从URL到文件系统的映射
- 安全方面的提示
- 动态共享对象(DSO)支持
- 内容协商
- 自定义错误响应
- 地址和端口的绑定(Binding)
- 多路处理模块
- Apache的环境变量
- Apache处理器的使用
- 过滤器(Filter)
- suEXEC支持
- 性能方面的提示
- URL重写指南
- Apache虚拟主机文档
- 基于主机名的虚拟主机
- 基于IP地址的虚拟主机
- 大批量虚拟主机的动态配置
- 虚拟主机示例
- 深入研究虚拟主机的匹配
- 文件描述符限制
- 关于DNS和Apache
- 常见问题
- 经常问到的问题
- Apache的SSL/TLS加密
- SSL/TLS高强度加密:绪论
- SSL/TLS高强度加密:兼容性
- SSL/TLS高强度加密:如何...?
- SSL/TLS Strong Encryption: FAQ
- 如何.../指南
- 认证、授权、访问控制
- CGI动态页面
- 服务器端包含入门
- .htaccess文件
- 用户网站目录
- 针对特定平台的说明
- 在Microsoft Windows中使用Apache
- 在Microsoft Windows上编译Apache
- Using Apache With Novell NetWare
- Running a High-Performance Web Server on HPUX
- The Apache EBCDIC Port
- 服务器和支持程序
- httpd - Apache超文本传输协议服务器
- ab - Apache HTTP服务器性能测试工具
- apachectl - Apache HTTP服务器控制接口
- apxs - Apache 扩展工具
- configure - 配置源代码树
- dbmmanage - 管理DBM格式的用户认证文件
- htcacheclean - 清理磁盘缓冲区
- htdbm - 操作DBM密码数据库
- htdigest - 管理用于摘要认证的用户文件
- httxt2dbm - 生成RewriteMap指令使用的dbm文件
- htpasswd - 管理用于基本认证的用户文件
- logresolve - 解析Apache日志中的IP地址为主机名
- rotatelogs - 滚动Apache日志的管道日志程序
- suexec - 在执行外部程序之前切换用户
- 其他程序
- 杂项文档
- 与Apache相关的标准
- Apache模块
- 描述模块的术语
- 描述指令的术语
- Apache核心(Core)特性
- Apache MPM 公共指令
- Apache MPM beos
- Apache MPM event
- Apache MPM netware
- Apache MPM os2
- Apache MPM prefork
- Apache MPM winnt
- Apache MPM worker
- Apache模块 mod_actions
- Apache模块 mod_alias
- Apache模块 mod_asis
- Apache模块 mod_auth_basic
- Apache模块 mod_auth_digest
- Apache模块 mod_authn_alias
- Apache模块 mod_authn_anon
- Apache模块 mod_authn_dbd
- Apache模块 mod_authn_dbm
- Apache模块 mod_authn_default
- Apache模块 mod_authn_file
- Apache模块 mod_authnz_ldap
- Apache模块 mod_authz_dbm
- Apache模块 mod_authz_default
- Apache模块 mod_authz_groupfile
- Apache模块 mod_authz_host
- Apache模块 mod_authz_owner
- Apache模块 mod_authz_user
- Apache模块 mod_autoindex
- Apache模块 mod_cache
- Apache模块 mod_cern_meta
- Apache模块 mod_cgi
- Apache模块 mod_cgid
- Apache模块 mod_charset_lite
- Apache模块 mod_dav
- Apache模块 mod_dav_fs
- Apache模块 mod_dav_lock
- Apache模块 mod_dbd
- Apache模块 mod_deflate
- Apache模块 mod_dir
- Apache模块 mod_disk_cache
- Apache模块 mod_dumpio
- Apache模块 mod_echo
- Apache模块 mod_env
- Apache模块 mod_example
- Apache模块 mod_expires
- Apache模块 mod_ext_filter
- Apache模块 mod_file_cache
- Apache模块 mod_filter
- Apache模块 mod_headers
- Apache模块 mod_ident
- Apache模块 mod_imagemap
- Apache模块 mod_include
- Apache模块 mod_info
- Apache模块 mod_isapi
- Apache模块 mod_ldap
- Apache模块 mod_log_config
- Apache模块 mod_log_forensic
- Apache模块 mod_logio
- Apache模块 mod_mem_cache
- Apache模块 mod_mime
- Apache模块 mod_mime_magic
- Apache模块 mod_negotiation
- Apache模块 mod_nw_ssl
- Apache模块 mod_proxy
- Apache模块 mod_proxy_ajp
- Apache模块 mod_proxy_balancer
- Apache模块 mod_proxy_connect
- Apache模块 mod_proxy_ftp
- Apache模块 mod_proxy_http
- Apache模块 mod_rewrite
- Apache模块 mod_setenvif
- Apache模块 mod_so
- Apache模块 mod_speling
- Apache模块 mod_ssl
- Apache模块 mod_status
- Apache模块 mod_suexec
- Apache模块 mod_unique_id
- Apache模块 mod_userdir
- Apache模块 mod_usertrack
- Apache模块 mod_version
- Apache模块 mod_vhost_alias
- Developer Documentation for Apache 2.0
- Apache 1.3 API notes
- Debugging Memory Allocation in APR
- Documenting Apache 2.0
- Apache 2.0 Hook Functions
- Converting Modules from Apache 1.3 to Apache 2.0
- Request Processing in Apache 2.0
- How filters work in Apache 2.0
- Apache 2.0 Thread Safety Issues
- 词汇和索引
- 词汇表
- 指令索引
- 指令速查
- 模块索引
- 站点导航