FiveM/server manual/proxy setup

Материал из WiKiPi

Настройка прокси

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

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

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

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

Типы прокси

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

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

Подключить прокси

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

  • Cloudflare настраивается с использованием вашего домена, добавляя запись, например, server1.example.com в качестве проксированной записи A / CNAME на машину, которой вы управляете.
  • 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-адреса:

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

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

Если вы также хотите проксировать необработанные конечные точки TCP / UDP, модуль Nginx 'stream' можно использовать следующим образом (это недопустимо в типичном sites-enabled файле, он должен быть непосредственно в conf.d или nginx.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 блок (например, регулярное выражение), домен может использоваться, например, с веб-сайтом.
  • Реализация настраиваемого обработчика /client запросов initConnect и делегирование успешного подключения фактической initConnect последовательности внутреннего сервера . Это может быть использовано для выбора сервера или других творческих вещей.