Answer HTTP with a redirect to HTTPS on nginx
Why it matters
Nothing answers on http://, so visitors who type the bare domain without a remembered HSTS policy may get a connection error. Answering port 80 with a permanent redirect sends them to the https site.
The fix
- If the site is behind Cloudflare or another CDN that connects to this server over plain http (Cloudflare Flexible mode), this redirect loops. Switch the CDN to Full (strict) first, or redirect at the CDN instead (Always Use HTTPS).
- Add the server below, open port 80 in the firewall, run sudo nginx -t and reload.
nginx
server { listen 80; listen [::]:80; server_name example.com; return 301 https://$host$request_uri; }
The examples use example.com. Replace it with your own domain.
Related
- Reported by the HTTP to HTTPS redirect check
- Serve the site over HTTPS
- Stop redirecting HTTPS to HTTP
- Redirect HTTP to HTTPS
- Fix the broken HTTPS redirect chain
- Shorten the redirect chain
- Fix the HTTP redirect chain
- Redirect HTTP straight to HTTPS
- Redirect www and apex to one host
- Make the www or apex name work over HTTPS
Scan your domain to see whether this applies to you.