Where Clicks End, Commands Begin #42
hsntgm
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
🚀 Nginx Cache Purge Preload — v2.1.7
Cache More. Block Less.
🛠️ 71 files changed | ➕ 8,902 lines | ➖ 1,941 lines — Terminal Control. Wider Coverage. Smarter Preloading.
✨ What's New
🖥️ WP-CLI Integration (major milestone)
Full cache management now lives in the terminal — no browser required.
The
wp nppcommand exposes 10 subcommands covering every core NPP operation. Destructive commands support--dry-runfor safe inspection, and--porcelainonpurge/preloadfor clean shell-script output.wp npp purge--page-url=<url>wp npp preload--page-url=<url>, or--stopto kill a running jobwp npp statustable,json,yaml, orcsvwp npp log--lines=<n>) or truncate it (--clear)wp npp settingsget/setany plugin setting;--prettyadds a human-readable name columnwp npp settings-resetwp npp flushrg,safexec,wget)wp npp index-clearwp npp schedulewp npp schedule-set--freq,--time) or cancel (--cancel) the scheduled preloadCommon patterns:
Ideal for CI/CD pipelines, deployment hooks, post-migration cleanup scripts, and headless server management.
⚡ Smarter Preload Engine — Coverage Breakthrough (major milestone)
The core motivation for v2.1.7: cache every URL that is safe to cache — not blindly deny everything with a query string.
Prior versions excluded any URL containing a query string from preload, silently leaving entire classes of safe, cacheable URLs as permanent MISSes. The preload reject regex has been completely overhauled — from a blanket query-string exclusion to a surgical, named-parameter denylist that blocks only the handful of parameters that genuinely break caching.
?...→ skippedSites upgrading from earlier versions will see a significant increase in preload scope and cache coverage — URLs with benign query strings that were previously skipped are now preloaded and cached.
The same release also extends the default Cache Key Regex to support three additional
$fastcgi_cache_keyformats beyond the original:Use "Reset Default" on "Cache Key Regex" in Settings → Advanced to activate.
📡 Preload Feeds (new)
RSS and Atom feeds are now first-class citizens in the preload pipeline.
Previously excluded from preload by default, feed URLs can now be fully controlled at both site-wide and per-URL levels:
/feed/,/feed/atom/) — preloaded on demand or on scheduleToggle via the new "Preload Feeds" option in Settings → Preload Options. The expanded Purge Scope extensions (see below) ensure feeds are automatically invalidated on relevant content updates.
🎯 Advanced Tab — Preload All MISS (new)
A lighter, smarter alternative to Preload All — purpose-built for sites where the cache is already mostly warm.
When cache coverage is already high, Preload All wastes resources: it wipes the cache, then re-crawls everything from zero. Preload All MISS skips the purge entirely and crawls only the URLs currently absent from cache — significantly lower I/O and CPU cost for large, mostly-warm caches.
Available directly in the Advanced Tab (Cache Manager). Activates only when coverage exceeds 50% to prevent accidental use on cold caches.
🗂️ Expanded Purge Scope (extended)
Purge Scope now reaches further than ever — every major URL type is covered automatically when content changes:
No configuration changes required — existing Purge Scope settings are extended automatically.
🧡 Walkie (fun)
Meet Walkie — a tiny animated character who lives in the plugin header, strolls along the ribbon, and delivers cache-related commentary during long preload runs.
He fully believes he is a real AI assistant. He is not. But he is excellent company when a full-site preload has 4,000 URLs left to go.
Purely cosmetic. Zero performance impact.
🐾 Additional Highlights
--no-mmapflag — added to all cache scans for faster I/O on large directories of small binary cache files.>= 14.0.0now required. Outdated binaries are flagged in the Status tab and gracefully demoted to the PHP fallback on FP3.open_basedircompatibility detection — admin warning now fires when required plugin paths are blocked byopen_basedirrestrictions.🔒 Performance & Reliability
shell_execandexeccalls across the REST API, WP Cron, Dashboard Widget, and all other relevant execution paths.nppp_index_updater_event,npp_cache_preload_event) silently dying after their first run.nppp_index_updater_eventself-healing — event now auto-reschedules on the next admin load if wiped externally by WP-CLI, a cron manager plugin, or a database import.getenv/putenvcheck for URL Normalization (safexec).$scheme$request_method$host$request_urikeys — resolving silent purge failures on affected configurations.nullandfalsevalues passed totrim()andend().🗑️ Changed / Updated
shell_execandexecare now required.disable_functionsin your PHP configuration before upgrading.>= 14.0.0is now strictly enforced. FP3 Purge degrades to PHP recursive fallback on detection of an older binary.nppp_purged_allaction hook — fired after every successful full Nginx cache purge, enabling third-party plugins to trigger their own cache flush in sync.🧩 Where to Find Things
wp help nppSettings → Preload OptionsSettings → Preload OptionsSettings → AdvancedAdvanced Tab → Cache ManagerStatus Tab🔄 Upgrade Notes
skip-cacherules are compatible with the expanded preload scope before going live.shell_execandexecare enabled in your PHP configuration — these are now hard dependencies. Sites withdisable_functionsrestrictions blocking either function will lose cache management functionality.🙏 Credits
Huge thanks to everyone who tested and reported issues. Special shout-out to @neikoloves for thorough aaPanel compatibility issues and detailed reporting across both WebServer architectures. 💙
📜 Changelog
wp nppcommand with 10 subcommands:purge,preload,status,log,settings,settings-reset,flush,index-clear,schedule, andschedule-set. Supports--dry-run,--porcelain, and multiple output formats (json,yaml,csv) across subcommands.>= 14.0.0).open_basedircompatibility detection with admin warning for missing required paths.Vary: Accept-Encodingdouble-cache issue (fully dismissable).nppp_purged_alldeveloper action hook — fires after every successful full Nginx cache purge.$scheme://$host$request_uri,$host$request_uri, and$host$uri$is_args$argsformats. Use "Reset Default" on "Cache Key Regex" to activate.--no-mmapflag to all ripgrep cache scans for faster I/O on large directories of small binary cache files.shell_execandexeccalls across REST API, WP Cron, Dashboard Widget, and all relevant execution paths.getenv/putenvcheck for URL Normalization (safexec).nppp_index_updater_event,npp_cache_preload_event) silently dying after their first run.nppp_index_updater_eventself-healing — auto-reschedules on next admin load if wiped externally.$scheme$request_method$host$request_urikeys.null/falsevalues passed totrim()andend().shell_execandexec.This discussion was created from the release Where Clicks End, Commands Begin.
Beta Was this translation helpful? Give feedback.
All reactions