Logo

Nginx FastDL for your Garry's Mod server

Nginx FastDL for your Garry's Mod server

Native GMod download is capped at 20 KB/s. FastDL via HTTP/Nginx unbridles to several MB/s, divides connection times by 50, and offloads your GMod server. Complete setup on a VeryCloud VPS.

Introduction

GMod downloads custom assets via its slow native protocol (20 KB/s) unless you tell it to use an external HTTP server. This is FastDL. The concept: host .bsp, .mdl, .vtf on a web server (Nginx), compress to .bz2, point GMod at it via sv_downloadurl.

Benefits: 30-50x faster connections, negligible network load on the game server.

Prerequisites

  • A GMod server at VeryCloud
  • A separate VPS (a light VeryCloud Linux VPS, 2 vCPU / 2 GB is enough)
  • A domain pointing to the VPS (e.g. fastdl.yourserver.com)
  • Basic bash skills

Step 1: Install Nginx

apt update && apt install -y nginx
systemctl enable --now nginx

Verify: curl http://localhost returns the default page.

Step 2: Prepare the FastDL directory

mkdir -p /var/www/fastdl
chown -R www-data:www-data /var/www/fastdl

Step 3: Configure the Nginx vhost

Create /etc/nginx/sites-available/fastdl:

server {
    listen 80;
    server_name fastdl.yourserver.com;

    root /var/www/fastdl;
    autoindex off;

    location / {
        try_files $uri =404;
        sendfile on;
        tcp_nopush on;
        gzip off;
        access_log off;
    }

    location ~ /\. {
        deny all;
    }
}

Activate:

ln -s /etc/nginx/sites-available/fastdl /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx

Step 4: SSL with Let's Encrypt

apt install -y certbot python3-certbot-nginx
certbot --nginx -d fastdl.yourserver.com

GMod fully supports HTTPS for FastDL.

Step 5: Export GMod assets

From the GMod server (Wisp → Files), files to include in FastDL:

/garrysmod/maps/*.bsp
/garrysmod/models/**/*.mdl, *.vtx, *.vvd, *.phy
/garrysmod/materials/**/*.vtf, *.vmt
/garrysmod/sound/**/*.wav, *.mp3

Download via SFTP.

Step 6: Compress to .bz2

On the FastDL VPS, place files in /var/www/fastdl/ keeping the structure, then compress:

#!/bin/bash
cd /var/www/fastdl

find . -type f \( \
  -name "*.bsp" -o -name "*.mdl" -o -name "*.vtx" -o -name "*.vvd" -o \
  -name "*.phy" -o -name "*.vtf" -o -name "*.vmt" -o -name "*.wav" -o -name "*.mp3" \
\) -exec bash -c '
  if [ ! -f "$1.bz2" ] || [ "$1" -nt "$1.bz2" ]; then
    bzip2 -k -f "$1"
    echo "Compressed: $1"
  fi
' _ {} \;

chown -R www-data:www-data /var/www/fastdl

Run it. Both originals and .bz2 are kept.

Step 7: Configure GMod for FastDL

Edit /garrysmod/cfg/server.cfg:

sv_downloadurl "https://fastdl.yourserver.com"
sv_allowdownload 0
sv_allowupload 0

Restart. GMod now redirects clients to your FastDL.

Step 8: List resources to force-download

Add to /garrysmod/lua/autorun/server/fastdl.lua:

if SERVER then
    resource.AddFile("models/player/customchar.mdl")
    resource.AddFile("materials/customchar/skin.vtf")
    resource.AddSingleFile("sound/customsound.wav")
end

Or for workshop content:

resource.AddWorkshop("2876543210")

Step 9: Test

Ask a friend to connect (or use a fresh computer without cache).

Watch Nginx logs:

tail -f /var/log/nginx/access.log

Client download should be MB/s instead of 20 KB/s.

Step 10: Automate sync

#!/bin/bash
rsync -azP -e "ssh -i /root/.ssh/wisp_key -p 2022" \
  [email protected]:/garrysmod/maps/ \
  /var/www/fastdl/maps/

rsync -azP -e "ssh -i /root/.ssh/wisp_key -p 2022" \
  [email protected]:/garrysmod/models/ \
  /var/www/fastdl/models/

/usr/local/bin/fastdl-compress.sh

Cron every 6h: 0 */6 * * * /usr/local/bin/fastdl-sync.sh.

Troubleshooting

Players still download via GMod server (slow)sv_downloadurl misconfigured. URL 404? curl -I https://fastdl.yourserver.com/maps/rp_downtown_v4c_v2.bsp.bz2. 404 on Nginx.bz2 missing, rerun compression. Permissions: chown -R www-data:www-data /var/www/fastdl. Client-side corrupted .bz2 — recompress from original. Verify: bzip2 -tv file.bz2. HTTPS not accepted by GMod — Let's Encrypt is fine, self-signed isn't.

Useful commands

curl -I https://fastdl.yourserver.com/maps/rp_downtown_v4c_v2.bsp.bz2
tail -f /var/log/nginx/access.log | grep fastdl

Conclusion

Nginx FastDL = mandatory for any serious GMod server with custom assets. 1-2h setup, huge connection time gain, offloads your game server. Workshop addons are handled by Steam — FastDL is only for local files.

Going further: Cloudflare CDN in front of FastDL (free, very fast), throughput monitoring, full automation via webhook.

Resources

Join our Discord community server

For any questions, suggestions, or just to chat with the community, join us on Discord!

900+Members