FastDL для Garry's Mod в 2026: настройка быстрой загрузки контента
Полное руководство по настройке FastDL для сервера Garry's Mod в 2026: nginx-конфиг, сжатие .bz2, sv_downloadurl, Cloudflare CDN, типичные ошибки.
Кратко: FastDL ускоряет загрузку контента в Garry’s Mod с 20 КБ/с (через игровой порт) до 5-50 МБ/с (через HTTP-сервер) - подключение нового игрока сокращается с 5-10 минут до 30-60 секунд. Для настройки нужен отдельный веб-сервер (nginx/apache), сжатые .bz2-файлы и две строки в server.cfg.
FastDL - обязательная инфраструктура для любого публичного Garry’s Mod сервера с кастомным контентом. Без неё игроки уходят на этапе загрузки карты, а сервер теряет онлайн. В этом гайде - полная настройка с нуля: HTTP-сервер на nginx, генерация .bz2, конфигурация Lua-ресурсов, подключение Cloudflare и диагностика типичных ошибок в 2026 году.
Что такое FastDL и зачем он нужен?
FastDL (Fast Download) - это механизм Source Engine для скачивания клиентского контента с внешнего HTTP-сервера, минуя медленный игровой канал. Стандартный download через игровой порт ограничен значением sv_downloadurl_disabled и работает на скорости около 20 КБ/с - карта в 100 МБ скачивается 80+ минут. FastDL раздаёт те же файлы через обычный nginx/apache на скорости канала - те же 100 МБ скачаются за 10-30 секунд.
Без FastDL сервер с DarkRP-сборкой (300-800 МБ контента) теряет 70-90% подключающихся игроков. С FastDL цифра падает до 5-15%, а CCU (concurrent users) растёт в 2-5 раз. Это критичный пункт инфраструктуры наравне с защитой от DDoS и резервными копиями.
Pterohost - игровой хостинг с DDoS-защитой L4+L7, NVMe SSD и круглосуточной поддержкой. Промокод 4START даёт -20% на первый заказ. Заказать сервер Garry’s Mod
Какие требования у FastDL?
Для запуска FastDL нужен отдельный HTTP-сервер, доступный по публичному IP или домену. Это может быть как тот же сервер, где стоит Garry’s Mod (на отдельном порту 80/443), так и внешний VPS, виртуальный хостинг или CDN. Полный список требований:
- Веб-сервер: nginx, apache, lighttpd или Caddy. Рекомендуется nginx как самый лёгкий.
- Дисковое пространство: 1.5-2x от размера контента сервера (оригиналы плюс .bz2).
- Канал: минимум 100 Мбит/с symmetric, для 50+ игроков - 1 Гбит/с.
- Утилита bzip2: для сжатия файлов (
apt install bzip2на Debian/Ubuntu). - Домен или поддомен: например
fastdl.myserver.com- удобнее, чем сырой IP. - HTTPS-сертификат: с 2024 года клиенты GMod корректно работают с HTTPS, рекомендуется Let’s Encrypt.
Какая файловая структура нужна для FastDL?
FastDL раздаёт контент по тем же относительным путям, что и сервер Garry’s Mod. Корневая директория веб-сервера должна повторять структуру garrysmod/. Список папок, которые попадают на FastDL:
| Папка | Содержимое | Сжимать в .bz2 |
|---|---|---|
maps/ | Файлы карт .bsp, .nav, .ain | Да |
materials/ | Текстуры .vmt, .vtf, .png | Да |
models/ | Модели .mdl, .vvd, .vtx, .phy | Да |
sound/ | Звуки .wav, .mp3, .ogg | Да |
particles/ | Партиклы .pcf | Да |
resource/ | Шрифты .ttf, локализации | Да |
lua/ | Не нужно (передаётся через игру) | Нет |
addons/ | Не нужно (только содержимое addons) | Нет |
Lua-файлы и meta-данные аддонов передаются через игровое соединение и не идут на FastDL. На веб-сервер кладётся только то, что нужно для отрисовки контента у клиента.
Как генерировать .bz2-файлы?
Сжатие в bzip2 уменьшает размер передачи на 40-70%. Клиент Garry’s Mod сначала проверяет существование файла materials/example.vmt.bz2, и если он есть - скачивает архив, распаковывает локально и сохраняет как materials/example.vmt. Команда сжатия одного файла:
bzip2 -k materials/example.vmt
# создаст materials/example.vmt.bz2, оригинал останется (-k = keep)
Массовое сжатие всех файлов на FastDL-сервере одной командой:
cd /var/www/fastdl/garrysmod
find maps materials models sound particles resource \
-type f \
! -name '*.bz2' \
-exec bzip2 -k -9 {} \;
Флаг -9 - максимальное сжатие (медленнее, но эффективнее). Для регулярного обновления удобно завернуть в скрипт update-fastdl.sh и запускать после каждой синхронизации контента.
Как настроить resource.AddFile?
Функция resource.AddFile() сообщает клиенту, что файл нужно скачать перед заходом на сервер. Вызывается в серверном Lua, обычно в garrysmod/lua/autorun/server/resources.lua. Базовый пример для одной карты:
-- garrysmod/lua/autorun/server/resources.lua
resource.AddFile("maps/gm_construct_v2.bsp")
resource.AddFile("materials/myaddon/logo.vmt")
resource.AddFile("materials/myaddon/logo.vtf")
resource.AddFile("models/myaddon/prop.mdl")
resource.AddFile("models/myaddon/prop.vvd")
resource.AddFile("models/myaddon/prop.vtx")
resource.AddFile("models/myaddon/prop.phy")
resource.AddFile("sound/myaddon/notify.wav")
Для Workshop-аддонов используется resource.AddWorkshop() - клиент получит контент с Steam Workshop вместо FastDL:
resource.AddWorkshop("123456789") -- ID воркшоп-коллекции или аддона
resource.AddWorkshop("987654321")
Авто-генерация списка для всех файлов в директории:
cd /path/to/garrysmod
find maps -name '*.bsp' -printf 'resource.AddFile("maps/%f")\n' > resources.lua
find models -name '*.mdl' -printf 'resource.AddFile("models/%P")\n' >> resources.lua
# повторить для materials, sound, particles
Как настроить server.cfg для FastDL?
В garrysmod/cfg/server.cfg нужно прописать три ключевых параметра. Без них FastDL не активируется, даже если HTTP-сервер настроен правильно:
// URL FastDL без слэша в конце
sv_downloadurl "https://fastdl.example.com/garrysmod"
// Разрешить клиентам скачивать контент с FastDL
sv_allowdownload 1
// Разрешить серверу отдавать контент (можно отключить, если весь трафик идёт через FastDL)
sv_allowupload 0
// Максимальный размер файла, передаваемого по FastDL (МБ)
net_maxfilesize 64
Параметр sv_downloadurl - корень FastDL без слэша. То есть если карта лежит по адресу https://fastdl.example.com/garrysmod/maps/gm_construct.bsp, в server.cfg указывается https://fastdl.example.com/garrysmod (без /maps).
Какой nginx-конфиг использовать для FastDL?
nginx раздаёт статику в десятки раз быстрее, чем apache, и потребляет в 5-10 раз меньше памяти. Базовый конфиг для FastDL-домена fastdl.example.com:
server {
listen 80;
listen [::]:80;
server_name fastdl.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name fastdl.example.com;
ssl_certificate /etc/letsencrypt/live/fastdl.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/fastdl.example.com/privkey.pem;
root /var/www/fastdl;
autoindex off;
server_tokens off;
# CORS для клиентов GMod
add_header 'Access-Control-Allow-Origin' '*' always;
# Корректные MIME-типы
types {
application/x-bzip2 bz2;
application/octet-stream bsp mdl vvd vtx phy vmt vtf pcf wav mp3 ogg ttf;
text/plain nav ain;
}
# Кэширование на стороне клиента
location / {
expires 30d;
add_header Cache-Control "public, immutable";
try_files $uri =404;
}
# Запрет доступа к скрытым файлам
location ~ /\. {
deny all;
}
}
После создания конфига - проверка и перезапуск:
nginx -t && systemctl reload nginx
Как подключить Cloudflare как CDN?
Cloudflare даёт бесплатный CDN с edge-нодами в 300+ городах мира, что критично для серверов с международной аудиторией. Пошаговая настройка:
- Зарегистрировать домен в Cloudflare и навести NS на их серверы.
- Создать A-запись
fastdl.example.com-> IP вашего HTTP-сервера, включить proxy (оранжевая иконка). - SSL/TLS -> Full (Strict) - использовать ваш Let’s Encrypt-сертификат.
- Caching -> Configuration -> Browser Cache TTL: 1 month.
- Rules -> Page Rules: для
fastdl.example.com/*выставить Cache Level: Cache Everything, Edge Cache TTL: 1 month.
После активации 80-95% запросов будут отдаваться с edge-нод Cloudflare, а нагрузка на ваш HTTP-сервер упадёт до фоновой. Проверить, что контент кэшируется:
curl -I https://fastdl.example.com/garrysmod/maps/gm_construct.bsp.bz2
# В ответе должен быть заголовок CF-Cache-Status: HIT
Как диагностировать проблемы FastDL?
Если игрок не может скачать контент - в 90% случаев причина видна в его клиентской консоли. Включите подробный лог: developer 1 и попробуйте зайти на сервер - в консоли пойдёт строка вида:
Downloading https://fastdl.example.com/garrysmod/maps/gm_construct.bsp.bz2
Error: HTTP 404 - file not found
Чек-лист диагностики:
- Открыть URL вручную в браузере. Если 404 - файл не залит на FastDL.
- Проверить MIME-тип:
curl -Iдолжен вернутьContent-Type(неtext/html). - Проверить регистр имён: Linux чувствителен к регистру,
gm_Construct.bsp!=gm_construct.bsp. - Проверить .bz2: если игроки качают медленно - возможно, .bz2 отсутствуют и идёт несжатая передача.
- Проверить CORS: добавить
Access-Control-Allow-Origin: *в nginx (см. конфиг выше). - Проверить sv_downloadurl: без слэша в конце, со схемой
https://. - Проверить net_maxfilesize: для файлов больше 16 МБ нужно 64.
Логи nginx показывают, какие файлы запрашиваются клиентами:
tail -f /var/log/nginx/access.log | grep fastdl
Какие типичные ошибки совершают админы GMod?
Самая частая ошибка - забыть про сжатие .bz2 на больших картах. Карта 80 МБ без сжатия качается на 3G-канале клиента 5-7 минут, а с .bz2 - около минуты. Вторая по частоте - неправильный путь в sv_downloadurl (со слэшем в конце или с подкаталогом garrysmod/garrysmod/). Третья - забыть resource.AddFile() для кастомных моделей: файл лежит на FastDL, но клиент не знает, что его надо скачать, и видит ERROR-модель.
Реже встречаются:
- Сжатые .bz2 без оригиналов (тогда клиент думает, что файла нет вообще).
- HTTP/2 ошибки на устаревшем nginx - обновить до 1.18+.
- Неправильный chmod на FastDL-папке: nginx не может читать файлы. Решение:
chmod -R 755 /var/www/fastdl && chown -R www-data:www-data /var/www/fastdl. - Cloudflare кэширует ошибку 404 на сутки. Если файл залит позже - сделать Purge Cache.
Сколько ресурсов потребляет FastDL?
Для типичного сервера на 32 игрока с DarkRP-сборкой (400-600 МБ контента) FastDL потребляет:
- Диск: 800-1200 МБ (оригиналы плюс .bz2).
- RAM: 30-50 МБ (nginx с дефолтными настройками).
- CPU: фоновый, пиковые 1-2% на 10 одновременных загрузок.
- Трафик: 10-25 ГБ/сутки при 100-200 заходах в день.
С Cloudflare трафик с вашего HTTP-сервера падает до 1-3 ГБ/сутки, что укладывается в любой бюджет хостинга. Для крупных проектов (5+ серверов одной сети) удобно вынести FastDL на отдельный VPS со 100 Гбайт NVMe и 1 Гбит/с каналом - такая инфраструктура стоит 5-10 евро/месяц и обслуживает онлайн в 500+ игроков.
Связанные материалы
Перед настройкой FastDL имеет смысл подготовить базу сервера: настройка DarkRP-сервера в Garry’s Mod и админ-панель ULX для модерации. Если контент уже лагает из-за тяжёлых аддонов - помогает удаление лишнего контента из Workshop.
Pterohost - игровой хостинг с DDoS-защитой L4+L7, NVMe SSD и круглосуточной поддержкой. Промокод 4START даёт -20% на первый заказ. Заказать сервер Garry’s Mod
FAQ: частые вопросы по FastDL
Можно ли использовать FastDL без HTTPS? Технически да - sv_downloadurl поддерживает HTTP. Но в 2026 году все актуальные браузеры и многие firewalls блокируют mixed content, а Cloudflare принудительно редиректит на HTTPS. Используйте Let’s Encrypt - сертификат бесплатный, обновляется автоматически.
Где хранить FastDL - на том же сервере или на отдельном? Для проекта до 32 игроков и 500 МБ контента - на том же сервере, на nginx с портом 80/443. Для крупных проектов или сети из 3+ серверов - отдельный VPS с 1 Гбит/с каналом и Cloudflare сверху.
Нужен ли FastDL, если используется только Workshop? Если весь контент сервера лежит в Steam Workshop и подключается через resource.AddWorkshop() - FastDL не обязателен. Но кастомные карты, серверные модели и звуки, не загруженные в Workshop, всё равно требуют FastDL.
Как обновить контент на FastDL без даунтайма? rsync с FastDL-сервера: rsync -avz --delete /opt/gmod/garrysmod/maps/ /var/www/fastdl/garrysmod/maps/, потом запустить сжатие новых файлов. Старые .bz2 удалить, если оригинал изменился. Cloudflare-кэш сбросить через Purge Everything или по URL.
Может ли FastDL раздавать аддоны напрямую (.gma)? Нет, FastDL работает только с распакованным контентом по стандартной структуре maps/, materials/, models/. Файлы .gma передаются через игровое соединение или через Steam Workshop. Чтобы раздать аддон через FastDL, его нужно распаковать: gmad.exe extract -file myaddon.gma -out /var/www/fastdl/garrysmod/.