Proxy-setup

From FiveM Wikipedia

Настройка прокси-сервера

Иногда может быть желательно иметь обратный прокси-сервер перед экземпляром Cfx.re сервера. В этом руководстве будут обсуждаться требования к такой установке.

Процесс подключения

Процесс подключения клиент-> сервер выглядит следующим образом:

  1. Клиент разрешает конечную точку подключения из взаимодействия присоединения. Это может быть любой из следующих вариантов:
    • Поле в выводе списка серверов.connectEndPoints
    • Адрес сервера, кэшированный подсистемой URL-адресов присоединения.
    • Необработанный IP-адрес, узел или URL-адрес, введенный в команде.connect
  2. Клиент извлекает общие метаданные сервера через a на конечной точке подключения.GET /info.json
  3. Клиент пытается выполнить запрос к конечной точке подключения .initConnectPOST /client
  4. Если сервер принимает клиента, он отправит клиенту маркер подключения.
  5. Клиентские запросы на конечную точку подключения, получающие одну или несколько комбинаций IP/порт. Если указано несколько, он выберет один из них для использования в качестве конечной точки сервера.getEndpoints
  6. Клиентские запросы на конечной точке сервера. Это приведет к одному или нескольким запросам либо к конечной точке сервера, либо к переопределению файлового сервера.getConfigurationGET /files/*
  7. Клиент отправляет запрос сведений UDP на конечную точку сервера.
  8. Клиент отправляет запрос на подключение к ENet, а также рукопожатие UDP на конечную точку сервера. Если принято, клиент теперь имеет одноранговый узел ENet.
  9. Клиент начинает загрузку игры.
  10. Клиент потенциально открывает дополнительные каналы TCP/UDP боковой полосы для конечной точки сервера, потенциально используя другие протоколы через мультиплекс.

Типы прокси

Существует два различных типа обратных прокси, которые имеют смысл в этой системе, и один из них может быть настроен независимо от другого.

Одним из них является конечная точка подключения, которая может быть заменена любым обычным обратным прокси-сервером HTTPS / балансировщиком нагрузки на порту, ведущим к фактическому TCP-порту сервера. Другой — конечная точка сервера, которой требуется необработанный прокси-сервер TCP/UDP на соответствующих портах, ведущий к фактическому порту TCP/UDP сервера.443

Подключение прокси-сервера

Для прокси-сервера подключения может работать следующая настройка (на основе руководства сообщества):

  • Cloudflare настраивается с доменом, которым вы владеете, добавляя запись, скажем, в качестве прокси-записи A/CNAME на машину, которой вы управляете.server1.example.com
  • nginx, установленный на машине, контролируемой пользователем (которая не обязательно должна быть основным сервером: это может быть бюджетный VPS под управлением Linux даже для сервера Windows), имеющий запись хоста для , как показано ниже: server1.example.com
    upstream backend {
        # use the actual server IP here, or if separate, a proxy server
        server 100.64.1.2:30120;
    }
    
    # assuming this path exists
    proxy_cache_path /srv/cache levels=1:2 keys_zone=assets:48m max_size=20g inactive=2h;
    
    server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
    
        server_name server1.example.com;
    
        # this can also be a Cloudflare origin certificate if you're using CF
        ssl_certificate /path/to/certificate.pem;
        ssl_certificate_key /path/to/privkey.pem;
    
        location / {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr;
            # required to pass auth headers correctly
            proxy_pass_request_headers on;
            # required to not make deferrals close the connection instantly
            proxy_http_version 1.1;
            proxy_pass http://backend;
        }
    
        # extra block for a caching proxy
        location /files/ {
            proxy_pass http://backend$request_uri;
            add_header X-Cache-Status $upstream_cache_status;
            proxy_cache_lock on;
            proxy_cache assets;
            proxy_cache_valid 1y;
            proxy_cache_key $request_uri$is_args$args;
            proxy_cache_revalidate on;
            proxy_cache_min_uses 1;
        }
    }
  • Следующие значения в конфигурации сервера:
    # prevents the server list from advertising your server using its actual IP
    set sv_forceIndirectListing true
    
    # makes the server list backend request `https://server1.example.com/` instead of the default
    set sv_listingHostOverride "server1.example.com"
    
    # a space-separated list of IPv4 networks in CIDR notation to allow 'X-Real-IP'
    # from, as well as bypass the rate limiter
    set sv_proxyIPRanges "100.64.1.1/32"
    
    # the actual endpoint your server is hosted on, or one
    # or multiple server endpoint proxies as noted below
    set sv_endpoints "100.64.1.2:30120"
    
    # some guides also mention `sv_listingIpOverride`, this value is only needed if the server list backend
    # can't guess the IP to query itself, and is not provided to any front-end connection.
    #
    # this is usually the case for systems with multiple IPs, or if the server is firewalled off for all hosts except
    # a server proxy.
  • Если вы хотите настроить прокси-сервер кэширования, также будет полезно следующее:
    # obfuscates files with a global key, instead of a per-client key
    set adhesive_cdnKey "yourSecret"
    
    # adds a file server for 'all' resources
    fileserver_add ".*" "https://server1.example.com/files"

Рабочая настройка этого примера будет иметь следующие URL-адреса, правильно доступные в браузере:

  • https://server1.example.com/info.json
  • https://server1.example.com/players.json
  • https://server1.example.com/dynamic.json
  • https://server1.example.com/client (должно показывать '/client is ONLY POST')

Обратите внимание, что в настоящее время использование команды должно использовать или URL-адрес присоединения, он не будет пытаться найти голый домен в качестве URL-адреса.connectconnect "https://server1.example.com/"

Прокси сервера

Если вы также хотите проксировать необработанные конечные точки TCP/UDP, модуль Nginx 'stream' можно использовать следующим образом (это недопустимо в типичном файле, оно должно быть непосредственно в a или ):sites-enabledconf.dnginx.conf

stream {
    upstream backend {
        server 100.64.1.2:30120;
    }
    server {
		listen 30120;
		proxy_pass backend;
	}
	server {
		listen 30120 udp reuseport;
		proxy_pass backend;
	}
}

При настройке этого параметра также выполните соответствующую настройку.sv_endpoints

Расширенные настройки

Эта настройка также может иметь несколько вариантов:

  • Можно добавить подсистему балансировки нагрузки в кластер Kubernetes в качестве правильного входящего трафика.
  • Если указан правильный блок (например, регулярное выражение), домен может быть совместно использован, скажем, с веб-сайтом.location
  • Реализация пользовательского обработчика для запросов initConnect и делегирование успешного подключения к фактической последовательности внутреннего сервера. Это может быть использовано для выбора сервера или некоторых других творческих вещей./clientinitConnect



Руководство по серверу