Cara Mengatasi Redirect Loop Nginx dengan Cepat & Akurat

Redirect loop Nginx atau yang biasa dikenal dengan error ERR_TOO_MANY_REDIRECTS terjadi ketika server terjebak dalam siklus pengalihan (redirect) tak berujung antara HTTP ke HTTPS, atau antara domain utama dengan subdomain. Masalah ini paling sering dipicu oleh konfigurasi blok server yang salah, ketidaksesuaian status SSL pada reverse proxy seperti Cloudflare, atau aturan pengalihan yang keliru pada berkas nginx.conf.

Untuk menyelesaikan masalah ini secara instan, Anda perlu mengidentifikasi titik awal terjadinya pengalihan menggunakan alat pengembang peramban (Browser Developer Tools) pada tab Network, lalu menerapkan koreksi konfigurasi yang sesuai pada server Nginx Anda.

Penyebab Utama & Matriks Solusi Redirect Loop Nginx

Tabel berikut merangkum penyebab umum terjadinya kesalahan pengalihan pada Nginx beserta parameter perbaikannya:

Penyebab Utama Gejala / Pesan Error Solusi Konfigurasi Nginx
SSL Flexible Mode (Cloudflare) Infinite loop saat SSL aktif di Cloudflare tapi Flexible Ubah mode SSL Cloudflare ke Full atau Full (Strict)
Redirection HTTP ke HTTPS Ganda Blok server mencakup aturan return 301 ke HTTPS secara redundan Hapus aturan ganti protokol yang bertumpuk, gunakan satu blok khusus
Salah Deteksi Protokol (Reverse Proxy) Aplikasi di belakang Nginx mengira koneksi masih HTTP Tambahkan header X-Forwarded-Proto $scheme
Konfigurasi WordPress / CMS URL Site Address dan WordPress Address berbeda protokol Sesuaikan pengaturan URL di database atau berkas wp-config.php

Langkah Teknis Perbaikan Konfigurasi Nginx

1. Memperbaiki Konfigurasi Blok Server HTTP ke HTTPS

Pastikan Anda tidak membuat aturan return 301 yang saling tumpang tindih. Berikut adalah contoh sintaks blok server Nginx yang benar dan bersih untuk memaksa penggunaan HTTPS tanpa memicu perulangan:

server {
    listen 80;
    server_name contoh.com www.contoh.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name contoh.com www.contoh.com;

    ssl_certificate /path/ke/sertifikat.crt;
    ssl_certificate_key /path/ke/kunci.key;

    location / {
        try_files $uri $uri/ =404;
    }
}

2. Menambahkan Header untuk Reverse Proxy (Node.js, PHP-FPM, Docker)

Jika Nginx bertindak sebagai reverse proxy yang meneruskan traffic ke aplikasi internal (seperti Node.js, Python, atau container Docker), pastikan Anda meneruskan informasi skema protokol dengan benar agar aplikasi tidak memerintahkan Nginx untuk terus-menerus melakukan redirect:

location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

Pengujian dan Validasi Lapangan

Setelah melakukan perubahan pada berkas konfigurasi Nginx (biasanya terletak di /etc/nginx/sites-available/ atau /etc/nginx/nginx.conf), selalu lakukan pengujian sintaks untuk mencegah kegagalan layanan:

  1. Jalankan perintah pengujian sintaks di terminal server: sudo nginx -t
  2. Jika hasil pengecekan bernilai sukses (syntax is ok, test is successful), muat ulang layanan Nginx: sudo systemctl reload nginx
  3. Bersihkan cache peramban atau gunakan mode penyamaran (Incognito) saat menguji akses situs web Anda.