How to use
- Form inputExisting nginx.conf
Fill in the form or paste a config
- proxy_pass, location, etc.Does not replace nginx -t
Check syntax and points to review
- nginx.conf
Output a tidied config
In “Generate”, choose a use case (static site, reverse proxy, SPA, PHP-FPM) and enter the domain name.
Pick HTTPS, www handling, compression, caching, security headers and access limits; the config appears below. Invalid inputs show a reason per field.
Press “Copy” or “Save”, run `sudo nginx -t` on your server, then apply it.
To review an existing config, paste it into “Check config” (or press “Try the sample”) and read “Syntax” and “Points to check”.
To tidy it, choose an indent in “Format” and take the result.
What it does
Forms per use case
Choose static site, reverse proxy (upstream, WebSocket, timeouts, X-Forwarded-*), SPA (try_files) or PHP-FPM. It covers HTTP→HTTPS redirect, www unification, the ACME challenge path, gzip / brotli, static file caching, allow/deny, a Basic auth template, limit_req and client_max_body_size.
TLS equivalent to Mozilla intermediate
TLS 1.2/1.3 and the cipher list follow Mozilla Server Side TLS "intermediate" (guideline 5.7). This is the implementation as of 2026-10-15; check the Mozilla generator for the latest.
Inputs are validated before output
Domains, paths, upstreams, sizes and IPs only accept fixed shapes, so a typed `;` or newline cannot turn into another directive.
Points to check, not verdicts
Lists, with line numbers, proxy_pass trailing slashes, alias vs root, if usage, location priority, add_header inheritance, duplicate server_name, listen 443 without ssl, HSTS preload, autoindex, server_tokens, and old TLS or weak ciphers.
Syntax from a tokenizer
Finds mismatched braces, missing semicolons, unclosed quotes and unknown directives, and outlines the server / location structure. Input is limited to 300,000 characters, 20,000 directives and 64 nesting levels.
Nothing is sent
The pasted config is processed only in your browser and not sent to a server. nginx is not run.
Use cases
- Write a reverse proxy in front of a Node.js, Python or Go app, including WebSocket and timeouts
- Write the HTTP-to-HTTPS 301 and www unification without breaking Let's Encrypt renewal
- Find a missing brace or semicolon in an nginx.conf you were handed
- Check whether proxy_pass trailing slashes, alias vs root or location priority shift paths
- See whether an add_header in a child block drops the parent’s security headers
- Unify the indentation of a config written in different styles by a team
Capability matrix
| Feature | Support | Notes |
|---|---|---|
| Generate a config from a form (static, proxy, SPA, PHP-FPM, HTTPS redirect, headers, limits) | Supported | — |
| Syntax check of a pasted config (braces, semicolons, quotes, unknown directives) | Partial | Only tokens and brace matching. Where a directive may appear, argument counts and value validity are not checked |
| Pointing out common mistakes (proxy_pass, alias, location, add_header, HSTS, TLS …) | Partial | Based on typical patterns. It can raise false alarms and miss things; it is not a verdict |
| Indentation formatting | Supported | — |
| Checking with a real nginx -t | Not supported | nginx is not run. Always run nginx -t on your own server before applying |
| Resolving include or reading other files | Not supported | include targets are not read; only the paths are listed |
| Connecting to servers, obtaining certificates or checking real responses | Not supported | No network access |
| Inspecting the body of Lua and similar code blocks | Not supported | Kept as is and not inspected |
Limits & notes
- Pasted input is limited to 300,000 characters, 20,000 directives and 64 nesting levels.
- The output is a template. Adjust certificate paths, dhparam, the PHP-FPM socket and the user/password file to your environment.
- brotli needs the ngx_brotli module in nginx. http2 on; needs nginx 1.25.1 or later.
- The PHP deny matches directory names you list (default uploads upload files media images) and covers only .php under them. Other extensions such as .phtml, and directories with other names, are not covered.
- Basic auth and limit_req are set at server level and apply to every location. The HTTP-to-HTTPS redirect server is not protected, so credentials are never sent over plain HTTP.
- The TLS settings are equivalent to Mozilla intermediate. They are not tuned for old browsers or operating systems.
- The CSP is only a commented template and is not enabled.
- “Points to check” are a guide from tokenizing; it can flag correct configs and miss real problems.
Privacy & safety
Generating, analyzing and formatting happen entirely in your browser. The config you enter, domain names and the generated config are never sent to or stored on a server, and nginx is not run.
FAQ
How do I write an nginx reverse proxy config?
How do I redirect HTTP to HTTPS in nginx?
What does a trailing slash on proxy_pass change?
Why do parent headers disappear when I add add_header?
Can it replace nginx -t?
Is my nginx.conf sent to a server?
Related tools
robots.txt Tester
Paste a robots.txt to see instantly whether a URL is allowed or blocked for Googlebot or AI crawlers, and which line decided it. Misspellings and directives Google ignores are flagged too.
MIME & Content-Type Studio
Search extensions and MIME types both ways, get problems in a Content-Type header pointed out, and compare a dropped file’s extension, browser file.type and real content. Server config drafts are generated too.
Certificate, CSR & PEM Studio
Reads PEM, DER (.cer/.crt), CSR and PKCS#7 (.p7b) and lists the subject, expiry (days left), SANs, public key, signature algorithm and SHA-256 fingerprint. It also checks chain order and signatures and converts PEM and DER. Everything runs in your browser and private keys are never read.
Secret Scanner
Paste text or drop config and code files to list likely secrets with file, line and rule before you publish or share them. Values are masked by default and you can save a copy with them replaced by ***. A helper only — it cannot guarantee that nothing is missed.
curl Converter
Paste “Copy as cURL” from Chrome or Firefox to see the method, URL, headers, cookies and body in tables, then convert to 12 kinds of code. The request is never sent and everything runs in your browser. Authorization and cookies can be hidden before you share.
Docker Compose Studio
Convert docker run commands to compose.yaml, or compose.yaml back to docker run. A compose file is checked for syntax, the Compose Specification and common mistakes, and security points worth confirming are listed. Nothing is started or pulled, and your input never leaves your device.
Last updated: