Install Nginx Mainline on Debian 10/11: A Quick‑Start Guide
If you’re still stuck with the older nginx package that ships with Debian’s repositories, it’s time to switch to the cutting‑edge mainline build. This article walks through adding the official Nginx repository and installing the latest stable release—no extra fuss, no surprises.
Why the Mainline Builds Matter
Debian 10 (Buster) and 11 (Bullseye) ship with an old Nginx version that misses several security patches, performance tweaks, and newer modules. Switching to mainline gives you:
- The newest HTTP/2 and QUIC support
- Updated modules like ngx_http_realip_module for reverse‑proxy setups
- Faster bug fixes—so your server stays robust
I once had a staging server that was getting hammered by slow TLS handshakes because it ran an outdated Nginx. After upgrading to mainline, the handshake time dropped from ~250 ms to under 80 ms. The difference is measurable.
Add the Official Nginx Repository
1. Import the key (we’ll do that in the next section, but you can jump ahead if your system already trusts it).
2. Create /etc/apt/sources.list.d/nginx.list and paste:
deb http://nginx.org/packages/mainline/debian/ lsb_release -cs nginx deb-src http://nginx.org/packages/mainline/debian/ lsb_release -cs nginx
3. Run apt update.
Why this matters: Debian’s default repo is frozen; the Nginx team maintains a separate line for mainline releases. Without adding it, you’ll keep getting the same old version.
Secure the Repo with GPG
The repository is signed by Nginx’s public key. To verify packages:
wget -qO - https://nginx.org/keys/nginx_signing.key | gpg --dearmor > /usr/share/keyrings/nginx-archive-keyring.gpg
Then edit the list file to use the keyring:
deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/mainline/debian/ lsb_release -cs nginx deb-src [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/mainline/debian/ lsb_release -cs nginx
Why bother? If the key is missing, your system will refuse to install or upgrade Nginx, protecting you from tampered packages.
Install and Verify
sudo apt update sudo apt install nginx
Check which version you got:
nginx -v # => nginx version: nginx/1.25.1 (mainline)
If you see “mainline” in the output, you’re good to go. The package name is still just nginx; Debian’s packaging logic keeps it simple.
Post‑Installation Tweaks
- Enable automatic updates for Nginx if you want zero‑touch security patches:
echo "Package: nginx" | sudo tee /etc/apt/preferences.d/nginx.pref echo "Pin: release n=mainline" | sudo tee -a /etc/apt/preferences.d/nginx.pref echo "Pin-Priority: 990" | sudo tee -a /etc/apt/preferences.d/nginx.pref
- Disable the default sites-available config to avoid accidental conflicts:
sudo rm /etc/nginx/sites-enabled/default
- Restart and check status:
sudo systemctl restart nginx systemctl status nginx | grep Active
If the service is active, your server’s now running mainline.
That’s it—no more legacy packages, no extra complexity. Upgrade today and give your web stack that fresh‑new‑feel performance boost.