---
url: /config/policy.md
---
# 本地策略

本地策略，可以设置不同的用户等级和对应的策略设置，比如连接超时设置。Xray 处理的每一个连接都对应一个用户，按照用户的等级（level）应用不同的策略。

## PolicyObject

`PolicyObject` 对应配置文件的 `policy` 项。

```json
{
  "policy": {
    "levels": {
      "0": {
        "handshake": 60,
        "connIdle": 300,
        "uplinkOnly": 1,
        "downlinkOnly": 1,
        "statsUserUplink": false,
        "statsUserDownlink": false,
        "statsUserOnline": false,
        "bufferSize": 4
      }
    },
    "system": {
      "statsInboundUplink": false,
      "statsInboundDownlink": false,
      "statsOutboundUplink": false,
      "statsOutboundDownlink": false
    }
  }
}
```

> `level`: map{string: [LevelPolicyObject](#levelpolicyobject)}

一组键值对，每个键是一个字符串形式的数字（JSON 的要求），比如 `"0"`、`"1"` 等，双引号不能省略，此数字对应用户等级。每一个值是一个 [LevelPolicyObject](#levelpolicyobject).

::: tip
每个入站出站代理现在都可以设置用户等级，Xray 会根据实际的用户等级应用不同的本地策略。
:::

> `system`: [SystemPolicyObject](#systempolicyobject)

Xray 系统级别的策略

### LevelPolicyObject

```json
{
  "handshake": 60,
  "connIdle": 300,
  "uplinkOnly": 1,
  "downlinkOnly": 1,
  "statsUserUplink": false,
  "statsUserDownlink": false,
  "bufferSize": 10240
}
```

> `handshake`: number

连接建立时的握手时间限制。单位为秒。默认值为 `60`。在入站代理处理一个新连接时，在握手阶段如果使用的时间超过这个时间，则中断该连接。

> `connIdle`: number

连接空闲的时间限制。单位为秒。默认值为 `300`。inbound/outbound 处理一个连接时，如果在 `connIdle` 时间内，没有任何数据被传输（包括上行和下行数据），则中断该连接。

> `uplinkOnly`: number

当连接下行线路关闭后的时间限制。单位为秒。默认值为 `1`。当服务器（如远端网站）关闭下行连接时，出站代理会在等待 `uplinkOnly` 时间后中断连接。

> `downlinkOnly`: number

当连接上行线路关闭后的时间限制。单位为秒。默认值为 `1`。当客户端（如浏览器）关闭上行连接时，入站代理会在等待 `downlinkOnly` 时间后中断连接。

::: tip
在 HTTP 浏览的场景中，可以将 `uplinkOnly` 和 `downlinkOnly` 设为 `0`，以提高连接关闭的效率。
:::

> `statsUserUplink`: true | false

当值为 `true` 时，开启当前等级的所有用户的上行流量统计。

> `statsUserDownlink`: true | false

当值为 `true` 时，开启当前等级的所有用户的下行流量统计。

> `statsUserOnline`: true | false

当值为 `true` 时，开启当前等级的所有用户的在线数量统计。(在线标准：20秒内有过连接活动)

> `bufferSize`: number

每个请求的内部缓存大小，单位为 KB。注意，多个请求可能被多路复用承载在同一条连接上，比如使用 mux.cool 或者 GRPC 时，也即是说即使共享一条底层连接，它们的缓存池也是独立的。

当内部缓存大于该值时，只有内部缓存被发出直至小于等于该值后才会进行下一次写入。

注意，对于一条 UDP 请求，如果尝试写入时处于缓存已满状态，写入操作不会被阻塞，而是**丢弃**，如果设置过低或为 0 可能会导致预期外的宽带浪费。

默认值:

* 在 ARM、MIPS、MIPSLE 平台上，默认值为 `0`。
* 在 ARM64、MIPS64、MIPS64LE 平台上，默认值为 `60`。
* 在其它平台上，默认值为 `512`。

默认值可以通过环境变量 XRAY\_RAY\_BUFFER\_SIZE 设置，注意在环境变量中单位为 MB(环境变量设置为 1 等于 config 设置为 1024)

### SystemPolicyObject

```json
{
  "statsInboundUplink": false,
  "statsInboundDownlink": false,
  "statsOutboundUplink": false,
  "statsOutboundDownlink": false
}
```

> `statsInboundUplink`: true | false

当值为 `true` 时，开启所有入站代理的上行流量统计。

> `statsInboundDownlink`: true | false

当值为 `true` 时，开启所有入站代理的下行流量统计。

> `statsOutboundUplink`: true | false

当值为 `true` 时，开启所有出站代理的上行流量统计。

> `statsOutboundDownlink`: true | false

当值为 `true` 时，开启所有出站代理的下行流量统计。
