Nginx Proxy Manager (NPM) is a popular reverse proxy with a point-and-click GUI for managing proxy hosts, SSL certificates, and access lists. Because it routes traffic to every other service in your homelab or VPS setup, NPM is a single point of failure worth monitoring carefully. Vigilmon can watch NPM's admin UI, its proxy targets, and the SSL certificates it manages — giving you end-to-end visibility across your entire reverse proxy stack.
What You'll Set Up
- HTTP monitor for the NPM admin interface (port 81)
- Health checks for proxied services through NPM
- SSL certificate expiry alerts for proxied domains
- Proxy availability checks to catch misconfigured or downed proxy targets
Prerequisites
- Nginx Proxy Manager running via Docker Compose (the standard deployment)
- Admin UI accessible on port
81 - At least one active proxy host pointing to a backend service
- A free Vigilmon account
Step 1: Monitor the NPM Admin Interface
The NPM admin UI runs on port 81. Monitoring it confirms that the NPM container is up, the Node.js backend is responding, and you can still manage your proxy configuration.
- Log in to vigilmon.online and click Add Monitor.
- Set Type to
HTTP / HTTPS. - URL:
http://<your-npm-host>:81(e.g.http://192.168.1.10:81). - Set Expected HTTP status to
200. - Set Check interval to
2 minutes. - Click Save.
This catches Docker container crashes, OOM kills, and port conflicts that would prevent anyone from managing proxy hosts.
Step 2: Monitor Proxied Services Through NPM
The most important thing to monitor is whether your proxied services are reachable through NPM — because that's the path your users take. A backend service can be healthy internally while NPM's proxy rule is misconfigured or the upstream IP has changed.
For each critical proxied service, add a Vigilmon HTTP monitor using the public domain NPM forwards to:
- Add Monitor →
HTTP / HTTPS. - URL:
https://app.yourdomain.com(your NPM proxy host, not the backend IP). - Set Expected HTTP status to
200(or301/302for services that redirect). - Set Check interval to
1 minutefor critical services. - Under Advanced, set Expected body contains to a unique string from the proxied app's response (e.g.
"status":"ok"or an HTML title) to detect cases where NPM returns a proxy error page with a200status. - Click Save.
Repeat for each proxied service. Vigilmon's multi-monitor dashboard gives you a single view of your entire reverse-proxied stack.
Step 3: Detect NPM Proxy Errors
When NPM can't reach a backend, it returns a 502 Bad Gateway or 504 Gateway Timeout — both of which Vigilmon catches automatically if your expected status is 200. To make this explicit:
- On each proxied service monitor, confirm Expected HTTP status is set to
200. - Set Consecutive failures before alert to
1for critical services — a single502from a reverse proxy usually means the backend is completely unreachable, not just slow.
You can also add an Expected body does not contain rule with the string 502 Bad Gateway for services that might return 200 with an error body embedded (less common but possible with some error pages).
Step 4: SSL Certificate Expiry Alerts
NPM manages Let's Encrypt certificates for all your proxy hosts. A renewal failure leaves a certificate expiring silently — no browser warning until the cert is already expired.
For each domain NPM manages SSL for:
- Add Monitor →
SSL Certificate. - Enter the domain:
https://app.yourdomain.com. - Set Alert when certificate expires in less than
30 days. - Click Save.
Add one SSL monitor per domain. NPM renews Let's Encrypt certificates at 30 days before expiry by default, so a 30-day alert window gives you time to diagnose renewal failures (port 80 blocked by firewall, ACME challenge failing) before the cert expires.
Step 5: Monitor NPM's Internal API (Optional)
NPM exposes a REST API used by its own frontend at http://<host>:81/api. You can use this as a deeper health signal:
- Add Monitor →
HTTP / HTTPS. - URL:
http://<your-npm-host>:81/api. - Set Expected HTTP status to
200or401— the API returns401 Unauthorizedfor unauthenticated requests, which still confirms the backend API is running. - Set Check interval to
5 minutes. - Click Save.
A 200 or 401 on /api proves the Node.js API process is alive. A timeout or 502 means the API has crashed even if the nginx layer is still up.
Step 6: Alert Channels and Maintenance Windows
- In Vigilmon, go to Alert Channels and connect Slack, email, or a webhook (PagerDuty, Discord).
- Add a Maintenance window for NPM updates — the container typically restarts in under 30 seconds but long enough to trigger a single-probe alert.
- For the admin UI monitor, set Consecutive failures to
2; for proxied service monitors, consider1if those services are customer-facing.
Going Further
- NPM + Crowdsec: If you use Crowdsec's nginx bouncer with NPM, monitor your Crowdsec API health separately — a crashed bouncer can block legitimate traffic while NPM appears healthy.
- Wildcard domains: NPM supports wildcard SSL certificates via DNS challenge. Monitor the wildcard domain's cert the same way —
https://*.yourdomain.comcertificates share an expiry date. - Load balancing: NPM supports upstream groups for load balancing. Add monitors for each upstream host individually so you can tell if one backend has dropped out of rotation.
With Vigilmon watching the NPM admin UI, your proxied services, and every SSL certificate in your stack, you'll catch reverse proxy failures the moment they happen — not when users start reporting broken links.