---
title: "ERR_TOO_MANY_REDIRECTS on Nginx: cause and fix"
description: "A 'return 301 https://$host$request_uri' block inside the HTTPS server block sends HTTPS traffic back to itself, producing an infinite loop behind a…"
canonical: "https://lemwatch.com/errors/err-too-many-redirects/in-nginx"
source: "https://lemwatch.com"
---

# ERR_TOO_MANY_REDIRECTS on Nginx

> A 'return 301 https://$host$request_uri' block inside the HTTPS server block sends HTTPS traffic back to itself, producing an infinite loop behind a TLS-terminating proxy.

## Why it happens on Nginx

 A 'return 301 https://$host$request_uri' block inside the HTTPS server block sends HTTPS traffic back to itself, producing an infinite loop behind a TLS-terminating proxy.

## The fix on Nginx

 Keep the redirect only in the port 80 server block, and behind a proxy redirect on $http_x_forwarded_proto = http rather than on the port.

## If that didn't fix it

 Nginx has its own failure mode, but ERR_TOO_MANY_REDIRECTS has a wider set of causes. The most common one overall is: The CDN forwards to the origin over HTTP while the origin redirects all HTTP to HTTPS — an infinite loop.

 Switch the CDN's SSL mode to Full so the origin leg is encrypted, or make the origin trust the forwarded-proto header instead of the raw scheme.

## Check your own domain

 The uptime probe returns the full redirect chain, so you can see the exact two URLs bouncing off each other instead of inferring it from behaviour.

## Frequently asked questions

### Why does ERR_TOO_MANY_REDIRECTS happen on Nginx?

 A 'return 301 https://$host$request_uri' block inside the HTTPS server block sends HTTPS traffic back to itself, producing an infinite loop behind a TLS-terminating proxy.

### How do I fix ERR_TOO_MANY_REDIRECTS on Nginx?

 Keep the redirect only in the port 80 server block, and behind a proxy redirect on $http_x_forwarded_proto = http rather than on the port.

### What does ERR_TOO_MANY_REDIRECTS mean?

 Two rules are bouncing the request back and forth — most often an HTTPS redirect at the application level fighting a proxy that is forwarding as plain HTTP, so each side thinks the other needs to upgrade.


## Related

- [All causes of ERR_TOO_MANY_REDIRECTS](https://lemwatch.com/errors/err-too-many-redirects)
- [All website error codes](https://lemwatch.com/errors)
- [ERR_TOO_MANY_REDIRECTS on Chrome](https://lemwatch.com/errors/err-too-many-redirects/on-chrome)
- [ERR_TOO_MANY_REDIRECTS on Cloudflare](https://lemwatch.com/errors/err-too-many-redirects/in-cloudflare)
- [ERR_TOO_MANY_REDIRECTS on WordPress](https://lemwatch.com/errors/err-too-many-redirects/in-wordpress)
- [Free Uptime & response check](https://lemwatch.com/tools/website-uptime)
- [ERR_TOO_MANY_REDIRECTS on Shopify](https://lemwatch.com/errors/err-too-many-redirects/in-shopify)
- [ERR_TOO_MANY_REDIRECTS on Netlify](https://lemwatch.com/errors/err-too-many-redirects/in-netlify)
