Local Policy

Local policy can be used to set different policy settings for different user levels, such as connection timeout settings. Each connection handled by Xray corresponds to a user, and different policies are applied based on the user's level.

PolicyObject

PolicyObject corresponds to the policy field in the configuration file.

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

level: map{string: LevelPolicyObject}

A set of key-value pairs, where each key is a string representation of a number (as required by JSON), such as "0", "1", etc., with the number corresponding to the user level. Each value is a LevelPolicyObject.

Tip

Each inbound and outbound proxy can now set the user level, and Xray will apply different local policies based on the actual user level.

system: SystemPolicyObject

Xray system-level policy.

LevelPolicyObject

{
  "handshake": 4,
  "connIdle": 300,
  "uplinkOnly": 2,
  "downlinkOnly": 5,
  "statsUserUplink": false,
  "statsUserDownlink": false,
  "bufferSize": 10240
}

handshake: number

The time limit for handshake during connection establishment. Unit: seconds. Default: 4. When processing a new inbound connection, if the time used in the handshake phase exceeds this limit, the connection will be aborted.

connIdle: number

The time limit for connection idle time. Unit: seconds. Default: 300. When processing an inbound/outbound connection, if no data is transferred (including upstream and downstream data) within connIdle time, the connection will be aborted.

uplinkOnly: number

The time limit after the downstream connection is closed. Unit: seconds. Default: 2. When the server (such as a remote website) closes the downstream connection, the outbound proxy will abort the connection after waiting for uplinkOnly time.

downlinkOnly: number

The time limit after the upstream connection is closed. Unit: seconds. Default: 5. When the client (such as a browser) closes the upstream connection, the inbound proxy will abort the connection after waiting for downlinkOnly time.

Tip

In the scenario of HTTP browsing, you can set uplinkOnly and downlinkOnly to 0 to improve the efficiency of connection closing.

statsUserUplink: true | false

When set to true, enables upstream traffic statistics for all users at the current level.

statsUserDownlink: true | false

When set to true, enables downstream traffic statistics for all users at the current level.

statsUserOnline: true | false

When set to true, enables counting online users for all users at the current level by email.

bufferSize: number

The internal buffer size of each connection. Unit: kB. When set to 0, the internal buffer is disabled.

Default values:

  • On ARM, MIPS, and MIPSLE platforms, the default value is 0.
  • On ARM64, MIPS64, and MIPS64LE platforms, the default value is 4.
  • On other platforms, the default value is 512.

SystemPolicyObject

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

statsInboundUplink: true | false

When set to true, enables upstream traffic statistics for all inbound proxies.

statsInboundDownlink: true | false

When set to true, enables downstream traffic statistics for all inbound proxies.

statsOutboundUplink: true | false

When set to true, enables upstream traffic statistics for all outbound proxies.

statsOutboundDownlink: true | false

When set to true, enables downstream traffic statistics for all outbound proxies.