All Tools View Categories About Contact Privacy

Nginx HTTP to HTTPS Redirect Config Generator

Send every plaintext request to the encrypted listener without serving content on 80.

Runs entirely in your browser - nothing is uploaded and no cloud connection is made.
Your redirect config will appear here.
-
lines
-
blocks

About Nginx HTTP to HTTPS Redirect Config Generator

Forcing HTTPS means intercepting every plaintext request and sending it to the encrypted listener, but a hand-written redirect is easy to get wrong: a missing listen on 80, a hardcoded host that breaks other domains, a dropped query string, or an accidental redirect loop when the same server tries to both serve and redirect. The Nginx HTTP to HTTPS Redirect Config Generator emits a clean, single-purpose 80-to-443 redirect block and validates the result before you copy it.

At the heart of the configuration are a handful of directives. listen 80 catches plaintext requests so they can be redirected rather than served. server_name matches the incoming host; use _ to redirect every domain on the box. return issues the redirect with a 301/302 code and a constructed https:// target URL. $host reuses the original Host header so the redirect keeps the requested domain. $request_uri appends the original path and query string when preservation is enabled. Together they shape how the server behaves, and the tool assembles them in the right context so the result is valid on the first try.

Common mistakes are easy to make. Pointing the redirect at a hardcoded domain breaks other hosts, so the generator keeps $host dynamic. Dropping $request_uri sends every request to the homepage, which is rarely what you want; the tool preserves it by default. Redirecting on the same server that serves HTTPS causes a loop, so this block only listens on 80. Choosing 301 caches the redirect in browsers, which can mask later changes during testing. The generator anticipates each of these and either sets a safe default or rejects the input with a clear message before anything is written to your clipboard.

Validation is strict because small configuration errors fail in subtle ways. Every input is checked for plausibility, and after the block is assembled it is re-parsed by a built-in tokenizer so unbalanced braces, missing semicolons or stray characters cannot reach your clipboard. Stat cards report line and block counts, and copy, download and print exports are one click away. Everything runs in your browser; nothing you type is transmitted to any server.

In practice this block drops into any standard nginx install. Save the output as a file under /etc/nginx/conf.d/ (or sites-available with a symlink), run nginx -t to confirm the syntax, then reload with nginx -s reload. Because the generator emits a single, self-contained server block with no hidden dependencies, it composes cleanly with your existing caching, logging and security configuration without directive collisions.

Beyond producing correct config, the tool is a reference you can read back and learn from. Each control maps to a real nginx directive, the sample button shows a complete working block in seconds, and clearing the form resets every field to its safe default. Standardising on a generator like this removes per-developer variation, keeps your configuration readable, and gives you a repeatable, auditable setup that passes nginx -t on the first try.

When something looks wrong in production, the first move is always to re-run nginx -t and inspect /var/log/nginx/error.log; most failures surface there with a line number. The access log records every request, so a sudden spike or a wall of 499 responses points straight at backend or timeout problems the generator helps you avoid in the first place.

This server block is designed to sit alongside - not fight - your other configuration. Because it declares its own server_name and a single, self-contained set of directives, you can drop it into conf.d without worrying about collisions with global caching, logging or security snippets that live elsewhere in the nginx tree.

For a production site, pair this block with TLS termination: serve on 80 for the redirect or health checks, and place the encrypted listener (or a front-end load balancer / CDN) in front so clients always speak HTTPS. The generator keeps that boundary clean so the two layers compose instead of overlapping.

If a change ever needs to be undone, the output is plain text you control: delete the file from conf.d, re-run nginx -t, and reload. There is no database and no hidden state, so rolling back is as simple as restoring the previous version from version control or your own backup.

Performance and correctness both benefit from explicit configuration. Defaults baked into the generator reflect current best practice rather than decades-old forum snippets, so the block you ship today will not surprise you with deprecated directives or insecure fallbacks six months from now.

For teams, a generated block is also documentation. New engineers can read the exact directives in place, compare them against the sample, and learn the relevant nginx behaviour without reverse-engineering a hand-maintained file that drifted from its original intent.

Features

  • listen 80 - catches plaintext requests so they can be redirected rather than served.
  • server_name - matches the incoming host; use _ to redirect every domain on the box.
  • return - issues the redirect with a 301/302 code and a constructed https:// target URL.
  • $host - reuses the original Host header so the redirect keeps the requested domain.
  • $request_uri - appends the original path and query string when preservation is enabled.
  • Self-verifying output re-parsed before display.
  • Copy, Download and Print exports.
  • Load-sample button fills realistic values.
  • Statistics cards for quick checks.
  • Runs entirely in your browser - nothing uploaded.

How to Use

  1. Enter a domain, or leave it blank to redirect all hosts.
  2. Pick the redirect code (301 permanent or 302 temporary).
  3. Decide whether to preserve the request URI.
  4. Click Generate (or Load sample) and review the block.
  5. Copy or download, then drop it into conf.d alongside your HTTPS server.
  6. Run nginx -t and reload.

Examples

Example 1 - All hosts blank domain with server_name _ redirects every plaintext request on the box.

Example 2 - Single domain domain example.com redirects only that host and keeps $host exact.

Example 3 - Preserve URI a request to /page?x=1 becomes https://host/page?x=1.

Example 4 - No preserve with preservation off, every request redirects to the site root.

Example 5 - Temporary code 302 is useful while testing before committing to 301.

Benefits

  • No redirect loops: only port 80 is involved.
  • Dynamic host preserves every domain.
  • URI preservation keeps deep links intact.
  • Clear 301/302 choice for testing vs production.
  • Self-checked output re-parsed before display.
  • Private: everything runs in your browser.

Frequently Asked Questions

Why serve on 80 at all?
Clients often type the bare domain, which defaults to HTTP. Listening on 80 lets you catch that request and bounce it to HTTPS instead of serving plaintext.
301 or 302?
Use 301 for a permanent move (browsers cache it) and 302 for temporary changes or testing. Most production sites want 301.
What does preserving the URI do?
Appending $request_uri keeps the path and query string, so /blog/post becomes https://host/blog/post rather than the homepage.
Do I still need a 443 server?
Yes. This block only redirects; you must have a separate server block (or listener) terminating TLS to actually serve HTTPS.
What is server_name _ ?
The underscore is a catch-all that matches any Host header, handy when you want to redirect every domain on the box.
Will this loop?
No. The redirect only fires on port 80; the HTTPS listener is separate, so there is no redirect loop.
Is the output validated?
Yes - the generated block is re-parsed before display.
Is anything uploaded?
No. Everything runs locally in your browser.