Setting Nginx untuk WordPress memang sedikit tricky. Salah setting sedikit malah gak jalan atau lebih parahnya terjadi redirect berulang-ulang sampai sitemu tidak bisa diakses.

Ini yang saya alami ketika saya setup WordPress menggunakan CloudFlare. Entah mengapa terjadi too many redirect pada saat saya mengakses /wp-admin atau wp-login.php. Padahal settingan saya sudah benar dan sudah dipakai dibeberapa site yang pernah saya setup.

Untuk tulisan setup WordPress dengan Nginx kamu bisa cari di sini: Setup WordPress dengan Nginx

Cara pertama yang saya lakukan adalah memasang dua konfirgurasi berikut di wp-config.php

define('FORCE_SSL_ADMIN', true);
define('FORCE_SSL_LOGIN', true);

Konfirgurasi di atas adalah cara WordPress untuk memaksa agar menggunakan https. Meskipun sudah diset, saya masih tetap mengalami too many redirect.

Curiga sepertinya ada yang kurang dengan settingan Nginx saya. Pas googling ternyata saya dapat solusi tepat dari Stackoverflow pada tautan ini https://stackoverflow.com/questions/44242267/nginx-wordpress-gives-err-too-many-redirects

Di sana saya cukup tambahkan settingan mirip yang ada ditautan di atas.

Dengan menambahkan flagging untuk https

map $http_x_forwarded_proto $https_flag {
    default off;
    https on;
}

 location ~ \.php$ {
      ...
       
        fastcgi_param HTTPS $https_flag;

      ...
    }

...

Jadi kira-kira seperti ini.

map $http_x_forwarded_proto $https_flag {
    default off;
    https on;
}

server {
    listen 80;
    listen 443;
    server_name example.com;
    root /var/www/html;
    index index.php;

    location /blog {
        try_files $uri $uri/ /blog/index.php?$args;
    }

    location ~ \.php$ {
        include fastcgi.conf;
        fastcgi_intercept_errors on;

        fastcgi_param HTTPS $https_flag;
        fastcgi_pass php;
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires max;
        log_not_found off;
    }
}

Dan akhirnya gak too many redirect lagi site saya .. 🥳