nginx — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited nginx (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Deep, practical guidance for writing, configuring, reviewing, and debugging nginx — a full-spectrum nginx assistant, not just an incident-response tool. Use it for routine setup (new vhost, reverse proxy, TLS, caching, security) just as much as for hard problems. On top of standard best practices it encodes hard-won operational lessons (mobile/MTU black holes, DPI filtering, add_header inheritance traps, HTTP/2 syntax drift across versions) so answers are correct and version-aware instead of generic snippets.
Authoring & setup (the everyday case):
upstream pools.Review & refactor:
.conf against the checklist below; clean up cruft.Debug (when something's wrong):
cert/SNI errors — diagnosed from logs, not guesswork.
authoring, produce a complete, correct config from the patterns in the references (adapted to the user's stack), then validate it. For debugging**, diagnose from logs first, then make the minimal correct change — don't paste a generic config at a problem you haven't localized.
.conf,note the original. Never touch ssl_certificate* lines unless explicitly asked.
nginx -t. Tellthe user to run nginx -t && systemctl reload nginx (reload, not restart — reload is zero-downtime).
releases (see Anti-patterns → "HTTP/2 syntax"). When unsure, ask for nginx -v or use the backward-compatible form.
| The user is… | Go to |
|---|---|
| Reporting a site that won't load / loads partially / slow on mobile / works only via VPN | references/diagnostics.md (start here — diagnose, don't guess) |
| Setting up or fixing a reverse proxy, WebSocket, SPA/Next.js, or S3/MinIO | references/proxy-patterns.md |
| Working on certificates, TLS tuning, HTTP/2, HTTP/3, SNI, redirects | references/tls-ssl.md |
| Chasing performance: caching, gzip/brotli, buffers, keepalive, MTU | references/performance-mobile.md |
| Hardening: security headers, rate limiting, IP allow/deny, real IP behind CDN | references/security.md |
| Getting a weird result (headers vanish, redirect loop, 1 server wins) | references/anti-patterns.md (read this before blaming nginx) |
.conf you touch)Run through this whenever you review or write a config:
server_name + missing files.listen 443? Use the version-correct syntax.Host, X-Real-IP, X-Forwarded-For,X-Forwarded-Proto? Is X-Forwarded-Proto the real scheme (https, not a hardcoded http)?
proxy_http_version 1.1 + Upgrade +Connection upgrade map?
location re-declare add_header andthereby silently drop security/CORS headers from the parent? (See anti-patterns — this is the #1 silent bug.)
that force clients to re-download everything (kills mobile).
server_name.return/rewrite ... last), never towrap proxy_pass or add_header (see "if is evil").
1m causes 413 on file uploads).
options-ssl-nginx.conf) so mobile clients don't renegotiate per request.
return 301 https://$host$request_uri; — not apile of certbot if blocks.
connectivity/loading complaints, the access log keyed by the user's IP tells you whether the request even arrived. See references/diagnostics.md.
systemctl reload nginx re-reads config with nodropped connections. Restart only when changing worker_* or modules.
or revert. Don't stack five "fixes" — that's how the bad configs in the wild got their cargo-cult cruft.
Certbot`, leave those lines alone; certbot rewrites them on renewal.
if use cases are better as map athttp level.
scripts/nginx-check.sh — runs nginx -t, prints version, lists everyserver_name/listen pair to spot duplicates and conflicts, and flags common anti-patterns (literal X-Forwarded-Proto http, Last-Modified $date_gmt, missing http2, if wrapping risky directives). Read-only.
scripts/diagnose-ip.sh <IP> [access_log] — classifies a connectivitycomplaint by grepping the access log for one client IP: requests arriving but large responses truncating → server/MTU layer; total silence → path/DPI problem upstream of nginx. Implements the workflow in diagnostics.md.
Run scripts with the config or log path as argument; they make no changes.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.