FiveM/server manual/proxy setup
Настройка прокси
Иногда может быть желательно установить обратный прокси перед вашим экземпляром сервера Cfx.re. В этом руководстве обсуждаются требования для такой установки.
Процесс подключения
Процесс подключения клиент-> сервер выглядит следующим образом:
- Клиент разрешает конечную точку подключения из взаимодействия с подключением . Это может быть любое из следующего:
- connectEndPoints Поле в сервере списка вывода.
- Адрес сервера, кэшированный подсистемой URL-адресов присоединения.
- Необработанный IP-адрес, хост или URL-адрес, введенный в connect команду.
- Клиент получает общие метаданные сервера через GET /info.json конечную точку подключения.
- Клиент пытается initConnect запросить конечную точку подключения POST /client.
- Если сервер принимает клиента, он отправляет клиенту токен подключения.
- Клиент запрашивает getEndpoints конечную точку подключения, получая одну или несколько комбинаций IP / портов. Если указано несколько, он выберет один для использования в качестве конечной точки сервера.
- Клиентские запросы getConfiguration на конечной точке сервера. Затем это приведет к одному или нескольким запросам GET /files/* либо к конечной точке сервера, либо к переопределению файлового сервера.
- Клиент отправляет информационный запрос UDP на конечную точку сервера.
- Клиент отправляет запрос на соединение ENet, а также подтверждение связи UDP в конечную точку сервера. Если принято, у клиента теперь есть одноранговый узел ENet.
- Клиент начинает загрузку игры.
- Клиент потенциально открывает дополнительные боковые каналы 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-адреса:
- 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 POST only')
Обратите внимание, что в настоящее время при 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 последовательности внутреннего сервера . Это может быть использовано для выбора сервера или других творческих вещей.