Skip to main content

NGINX Variables: Scope, Handlers, and Common Pitfalls


by Danila Vershinin, July 25, 2026

How NGINX variables really work: per-request containers, get handlers, lazy-and-cached map values, the empty-versus-not-found distinction, and subrequest isolation, with runnable, curl-verified examples using the echo, set-misc, lua, and array-var modules.

Read More...

Migrate From the ondrej nginx PPA to GetPageSpeed


by Danila Vershinin, July 5, 2026

The ondrej/nginx PPA deprecated its module packages at NGINX 1.28. Here is how to migrate to the GetPageSpeed APT repository and keep Brotli, Lua, ModSecurity and 100+ other modules on Debian and Ubuntu.

Read More...

NGINX Abuse Guard Module: Auto-Ban Scanners and Bots


by Danila Vershinin, June 26, 2026

Stop vulnerability scanners and brute-force bots automatically. The NGINX abuse guard module bans clients by their 404 and 403 error rate, in-worker, with no fail2ban or log shipping.

Read More...

NGINX Dynamic TLS Records: An Honest Benchmark in 2026


by Danila Vershinin, April 29, 2026

We rebuilt nginx-mod with Cloudflare’s 2015 dynamic TLS records patch and benchmarked it in a controlled rig with random interleave, CPU pinning, and 200 cold connections per condition. The “50% p95 TTFB win” we expected collapsed under noise control. Here are the honest numbers and what to do instead.

Read More...

NGINX slow_start: Gradual Upstream Ramp-Up Without Plus


by Danila Vershinin, April 22, 2026

NGINX Plus has slow_start to ramp traffic to freshly-live upstream servers from zero to full weight. Open-source NGINX has the struct field but never wired the scheduler. NGINX-MOD ships the missing scheduler logic and this article proves it with runtime measurements from a Rocky Linux VM.

Read More...

NGINX Immutable Module: Far-Future Cache-Control Headers


by Danila Vershinin, April 21, 2026

Cut wasted revalidation requests on versioned static assets. The NGINX immutable module emits RFC-compliant far-future Cache-Control headers with the immutable attribute, stale-while-revalidate, and stale-if-error in a single directive. This guide covers every directive, runtime-verified configs for Rocky Linux 10, the Magento 2 cache-busting pattern, and why it beats expires max.

Read More...

NGINX XSLT Module: Transform XML Responses into HTML


by Danila Vershinin, April 6, 2026

Learn how to use the NGINX XSLT module to transform XML responses into HTML, RSS feeds into styled web pages, and XML API output into user-friendly formats – all at the web server level without modifying your backend.

Read More...

NGINX Automatic Image Conversion: WebP and AVIF


by Danila Vershinin, April 5, 2026

Learn how to automatically convert and serve WebP and AVIF images in NGINX using the ngx_immerse filter module. This module transparently intercepts image responses from any source – static files, proxy_pass, or FastCGI – and converts them to modern formats based on browser support. No URL rewriting, no separate service, no application changes needed.

Read More...

How Not to Write an NGINX Module: A WebP Case Study


by Danila Vershinin,

A deep technical analysis of ngx_webp – an NGINX module that converts images to WebP on-the-fly. It works, but violates nearly every principle of NGINX module development. We dissect what went wrong and show how to do it right.

Read More...

NGINX WebAssembly: Extend NGINX with Proxy-Wasm Filters


by Danila Vershinin, April 4, 2026

Learn how to extend NGINX with WebAssembly using the ngx_wasm_module. Write custom filters in Rust, Go, or C++ using the Proxy-Wasm standard, and run them at near-native speed inside NGINX with full sandboxing — no C modules, no recompilation required.

Read More...