gRPC

Режим передачи данных, основанный на HTTP/2, полностью соответствует стандарту HTTP/2 и может быть ретранслирован другими HTTP-серверами (такими как Nginx).

gRPC (HTTP/2) имеет встроенное мультиплексирование, не рекомендуется включать mux.cool при использовании gRPC и HTTP/2.

⚠⚠⚠

  • gRPC не поддерживает указание Host. Пожалуйста, укажите правильное доменное имя в адресе исходящего прокси или укажите ServerName в (x)tlsSettings, иначе подключение не будет установлено.
  • gRPC не поддерживает fallback на другие сервисы.
  • Существует риск активного сканирования сервисов gRPC. Рекомендуется использовать обратный прокси-сервер, такой как Caddy или Nginx, для предварительного разделения трафика по пути.

Подсказка

Если вы используете обратный прокси-сервер, такой как Caddy или Nginx, обратите внимание на следующие моменты:

  • Убедитесь, что на обратном прокси-сервере включен HTTP/2.
  • Используйте HTTP/2 или h2c (Caddy), grpc_pass (Nginx) для подключения к Xray.
  • Путь в обычном режиме: /${serviceName}/Tun, в режиме Multi: /${serviceName}/TunMulti.
  • Если необходимо получать IP-адрес клиента, его можно передать через заголовок X-Real-IP, отправленный Caddy / Nginx.

Подсказка

Если вы используете fallback, обратите внимание на следующие моменты:

  • Не рекомендуется использовать fallback на gRPC, так как существует риск активного сканирования.
  • Убедитесь, что h2 находится на первом месте в (x)tlsSettings.alpn, иначе gRPC (HTTP/2) может не завершить TLS-рукопожатие.
  • gRPC не поддерживает маршрутизацию на основе path с помощью Xray.

GRPCObject

GRPCObject соответствует элементу grpcSettings конфигурации передачи.

{
  "authority": "grpc.example.com",
  "serviceName": "name",
  "multiMode": false,
  "user_agent": "custom user agent",
  "idle_timeout": 60,
  "health_check_timeout": 20,
  "permit_without_stream": false,
  "initial_windows_size": 0
}

authority: string

Строка, которая может использоваться как Host для реализации некоторых других целей.

serviceName: string

Строка, указывающая имя сервиса, аналогично пути в HTTP/2. Клиент будет использовать это имя для связи, а сервер будет проверять, совпадает ли имя сервиса.

Подсказка

Когда serviceName начинается с косой черты, можно настроить собственный путь, используя как минимум две косые черты.
Например, если на сервере указано "serviceName": "/my/sample/path1|path2", то на клиенте можно указать "serviceName": "/my/sample/path1" или "/my/sample/path2".

user_agent: string

Подсказка

Необходимо настроить только в outbound (клиент).

Установка пользовательского агента gRPC, может предотвратить блокировку трафика gRPC некоторыми CDN.

multiMode: true | false BETA

true включает multiMode, значение по умолчанию: false.

Это экспериментальная опция, которая может быть удалена в будущем, и ее совместимость между версиями не гарантируется. Этот режим может обеспечить прирост производительности примерно на 20% в тестовой среде, фактическая производительность зависит от скорости передачи.

Подсказка

Необходимо настроить только в outbound (клиент).

idle_timeout: number

Проверка работоспособности выполняется, если в течение определенного периода времени, измеряемого в секундах, не происходит передача данных. Если это значение меньше 10, то в качестве минимального значения будет использоваться 10.

Подсказка

Если не используется обратный прокси-сервер, такой как Caddy или Nginx (обычно не используется), и это значение установлено меньше 60, сервер может отправить непредвиденный кадр h2 GOAWAY, чтобы закрыть существующее соединение.

По умолчанию проверка работоспособности отключена.

Подсказка

Необходимо настроить только в outbound (клиент).

Подсказка

Может решить некоторые проблемы с "обрывом" соединения.

health_check_timeout: number

Время ожидания ответа проверки работоспособности в секундах. Если в течение этого времени проверка работоспособности не будет завершена и по-прежнему не будет передачи данных, проверка работоспособности будет считаться неудачной. Значение по умолчанию: 20.

Подсказка

Настройка требуется только на стороне исходящего соединения (клиента).

permit_without_stream: true | false

true разрешает проверку работоспособности, если нет дочерних подключений. Значение по умолчанию: false.

Подсказка

Необходимо настроить только в outbound (клиент).

initial_windows_size: number

Начальный размер окна h2 Stream. Если значение меньше или равно 0, эта функция не действует. Если значение больше 65535, механизм динамического окна будет отключен. Значение по умолчанию: 0, то есть не действует.

Подсказка

Необходимо настроить только в outbound (клиент).

Подсказка

При использовании CDN Cloudflare можно установить значение 65536 или выше, чтобы отключить механизм динамического окна, что предотвратит отправку непредвиденных кадров h2 GOAWAY CDN Cloudflare для закрытия существующего соединения.