Setup
Installation guide
Three steps. Two minutes if you already have the nginx.org repo set up. Less if you're fast.
Step 0: nginx.org, not your distro
These modules are compiled against nginx.org packages. They won't load on the nginx that ships with Debian or Ubuntu. That's a different binary, different ABI, different everything.
Did a apt install nginx and called it a day? That's the distro version.
Switch to nginx.org first, then come back.
nginx -v. Something like
nginx/1.30.x from nginx.org? You're good. nginx/1.18.0
or similar ancient version? That's the distro package. Time to switch.
Step 1: Add the Blendbyte repository
One-time setup per machine. Add the signing key and source list.
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://apt.blendbyte.net/nginx/blendbyte-archive-keyring.gpg \
| sudo tee /etc/apt/keyrings/blendbyte.gpg >/dev/null
echo "deb [signed-by=/etc/apt/keyrings/blendbyte.gpg] https://apt.blendbyte.net/nginx $(lsb_release -cs) main" \
| sudo tee /etc/apt/sources.list.d/blendbyte.list
sudo apt update Step 2: Install modules
Grab what you need. Mix and match.
# Install individual modules
sudo apt install nginx-module-brotli
sudo apt install nginx-module-geoip2
sudo apt install nginx-module-headers-more
# Or several at once
sudo apt install nginx-module-brotli nginx-module-geoip2 nginx-module-modsecurity All available packages:
sudo apt install \
nginx-module-brotli \
nginx-module-brotli-static \
nginx-module-zstd \
nginx-module-zstd-static \
nginx-module-modsecurity \
nginx-module-geoip2 \
nginx-module-stream-geoip2 \
nginx-module-headers-more \
nginx-module-substitutions \
nginx-module-cache-purge \
nginx-module-fancyindex \
nginx-module-dav-ext Step 3: Enable the module
Most packages drop a config into /etc/nginx/modules-enabled/ on install
and you're done. Quick check to be sure:
$ ls /etc/nginx/modules-enabled/ Nothing there? Create the symlink yourself:
# Replace brotli with your module name
$ sudo ln -s /etc/nginx/modules-available/50-mod-brotli.conf \
/etc/nginx/modules-enabled/
$ sudo nginx -t && sudo systemctl reload nginx Pinning (recommended)
If you have multiple nginx module sources (nginx.org ships njs, otel, and a few others),
pinning makes sure apt always picks ours for nginx-module-* packages
without you having to think about it.
cat <<EOF | sudo tee /etc/apt/preferences.d/blendbyte-nginx
Package: nginx-module-*
Pin: origin apt.blendbyte.net
Pin-Priority: 1001
EOF Keeping modules up to date
When nginx drops a new stable version, rebuilt modules are usually up within 24 hours. The packages have ABI version constraints baked in, so apt won't let you run a module built for nginx 1.26 on nginx 1.28. It'll tell you to upgrade both at once.
A standard upgrade is all you need:
$ sudo apt update && sudo apt upgrade Supported distros
All combinations of:
- Debian Bookworm (12)
- Debian Trixie (13)
- Ubuntu 22.04 LTS (Jammy)
- Ubuntu 24.04 LTS (Noble)
- Ubuntu 26.04 LTS (Resolute Raccoon)
On both amd64 and arm64 architectures.
What's not included
Things that come up and why we don't ship them:
- Lua: Just use OpenResty. Bolting the Lua module onto stock nginx is a world of hurt.
- VTS: The nginx-prometheus-exporter sidecar does more and doesn't require patching nginx.
- GeoIP v1: MaxMind killed those databases in 2018. Use GeoIP2.
- PageSpeed: Google archived it in 2020. Let it go.
- njs, otel, acme, image-filter, perl, xslt: These already come from the official nginx.org repo. Grab them there.