<!-- review: finished -->

<a id="http-referer"></a>

# Referer

该模块用于阻止 `Referer` 头字段值无效的请求访问站点。需要注意的是，伪造一个带有适当 `Referer` 字段值的请求是相当容易的，因此该模块的预期目的不是彻底阻止此类请求，而是阻止由常规浏览器发送的大量请求流。还应考虑到，即使是有效请求，常规浏览器也可能不发送 `Referer` 字段。

<a id="configuration-example-37"></a>

## 配置示例

```nginx
valid_referers none blocked server_names
               *.example.com example.* www.example.org/galleries/
               ~\.google\.;

if ($invalid_referer) {
    return 403;
}
```

<a id="directives-38"></a>

## 指令

<a id="index-0"></a>

<a id="referer-hash-bucket-size"></a>

### referer_hash_bucket_size

| [语法](https://cn.angie.software//angie/docs/configuration/configfile.md#configfile)   | `referer_hash_bucket_size` size;   |
|--------------------------------------------------------------------------------------|------------------------------------|
| 默认值                                                                                  | `referer_hash_bucket_size 64;`     |
| [上下文](https://cn.angie.software//angie/docs/configuration/configfile.md#configfile)  | server, location                   |

设置有效引用来源哈希表的桶大小。设置哈希表的详细信息在单独的 [文档](https://cn.angie.software//angie/docs/configuration/configfile.md#configure-hashes) 中提供。

<a id="index-1"></a>

<a id="referer-hash-max-size"></a>

### referer_hash_max_size

| [语法](https://cn.angie.software//angie/docs/configuration/configfile.md#configfile)   | `referer_hash_max_size` size;   |
|--------------------------------------------------------------------------------------|---------------------------------|
| 默认值                                                                                  | `referer_hash_max_size 2048;`   |
| [上下文](https://cn.angie.software//angie/docs/configuration/configfile.md#configfile)  | server, location                |

设置有效引用来源哈希表的最大大小。设置哈希表的详细信息在单独的 [文档](https://cn.angie.software//angie/docs/configuration/configfile.md#configure-hashes) 中提供。

<a id="index-2"></a>

<a id="valid-referers"></a>

### valid_referers

| [语法](https://cn.angie.software//angie/docs/configuration/configfile.md#configfile)   | `valid_referers` `none` | `blocked` | `server_names` | string ...;   |
|--------------------------------------------------------------------------------------|----------------------------------------------------------------------|
| 默认值                                                                                  | —                                                                    |
| [上下文](https://cn.angie.software//angie/docs/configuration/configfile.md#configfile)  | server, location                                                     |

指定将导致内置变量 [$invalid_referer](#v-invalid-referer) 被设置为空字符串的 `Referer` 请求头字段值。否则，该变量将被设置为 "1"。匹配搜索不区分大小写。

参数可以如下：

| `none`         | 请求头中缺少 `Referer` 字段；                                                       |
|----------------|----------------------------------------------------------------------------|
| `blocked`      | 请求头中存在 `Referer` 字段，但其值已被防火墙或代理服务器删除；此类值是不以 `http://` 或 `https://` 开头的字符串； |
| `server_names` | `Referer` 请求头字段包含其中一个服务器名称；                                                |
| `任意字符串`        | 定义服务器名称和可选的 URI 前缀。服务器名称的开头或结尾可以有一个 "\*"。在检查期间，`Referer` 字段中的服务器端口将被忽略；    |
| `正则表达式`        | 第一个符号应该是 "~"。需要注意的是，表达式将与 `http://` 或 `https://` 之后开始的文本进行匹配。              |

示例：

```nginx
valid_referers none blocked server_names
               *.example.com example.* www.example.org/galleries/
               ~\.google\.;
```

<a id="built-in-variables-8"></a>

## 内置变量

<a id="v-invalid-referer"></a>

### `$invalid_referer`

如果 `Referer` 请求头字段值被认为是 [有效的](#valid-referers)，则为空字符串，否则为 "1"。
