1 · Introduction
WSLProxy in 20 minutes
Architecture, live rules, WAF, traffic splits, admin UI, MCP, and CLI — the complete product tour.
WSLProxy is a self-hosted reverse proxy and edge control plane on OpenResty — virtual hosts, WAF, traffic splits, geo stats, MCP, and CLI — driven from JSON that takes effect without restarting nginx for every rule change.
$ wslproxy-cli pull -d ./cfg --resources servers,rules,waf ✓ synced 42 servers · 118 rules · 6 waf policies $ wslproxy-cli check nginx -o json ✓ openresty -t ok · healthz=200 $ wslproxy-cli push -d ./cfg --yes --verify # rules hot — no nginx reload for match changes ✓ applied · verified
Live-config routing, WAF, traffic splits, MCP, and CLI — without reloading nginx for every rule change.
Full walkthrough on YouTube · More in How-to videos
A growing list of walkthroughs — start with the introduction, then jump into shorter feature videos.
1 · Introduction
Architecture, live rules, WAF, traffic splits, admin UI, MCP, and CLI — the complete product tour.
2 · Feature · 2 min
Geographic Traffic Distribution — Top Countries, live choropleth, and how IP2Location feeds the edge.
Route, protect, observe, and automate — each capability hot on the request path or a flag away from reload.
Top Countries and a world map on the admin dashboard — every request tagged via IP2Location into live traffic stats.
Path, IP, country, JWT, S3, and cookie match with priority and specificity — no OpenResty reload for rule changes.
Policy packs, anomaly scoring, monitor or block, rate limits, CAPTCHA, and geo deny lists at the edge.
Full WAF guide →Weighted, canary, sticky, and least-conn backends with promote/rollback and upstream health.
Let’s Encrypt auto-ssl, force HTTPS, edge static cache, optional Varnish and Docker blob cache.
React Admin and Next.js ops, Swagger CRUD, MCP for agents, and wslproxy-cli for GitOps pipelines.
OpenResty loads server and rule JSON on the hot path. Only server-block nginx changes need a reload flag.
rewrite
Load host config, score candidate rules (path, IP, country, JWT…), run rate limit and WAF, stash the winner.
access
Honor response code: proxy (305), redirect, HTML block, CAPTCHA (306), or 403 — then resolve backend and timeouts.
balancer
Weighted, canary, sticky, or least-conn selection with per-server connect/send/read timeouts.
Deep dives and feature write-ups — listed here as they ship.
Feature deep dive
How Top Countries and the world choropleth work — IP2Location on the hot path, traffic_stats, and atlas-ready codes.
Clone the repo, bring up Docker with ./dev.sh, or deploy POPs with Ansible — then drive config like code.