Cara Mengatasi Error 521: Web Server is Down di Cloudflare
Pendahuluan
Kamu sedang asyik mengerjakan proyek, tiba-tiba website yang sudah dipasang Cloudflare menampilkan halaman bertuliskan Error 521: Web Server is Down. Pesan ini tidak berasal dari servermu langsung — melainkan dari Cloudflare yang mencoba menghubungi origin server-mu dan gagal.
Error 521 adalah salah satu error paling umum yang dialami developer saat menggunakan Cloudflare sebagai CDN atau proxy. Bedanya dengan error 522 (Connection Timed Out), error 521 terjadi karena koneksi ke origin server ditolak secara aktif — bukan timeout karena lambat.
Di artikel ini kita akan membahas penyebab utama, langkah diagnosa yang sistematis, dan cara memperbaikinya. Bayangkan Cloudflare seperti resepsionis gedung: kalau pintu kantor kamu terkunci dari dalam, resepsionis tidak bisa masuk dan melaporkan bahwa “ruangan tidak bisa diakses.”
Memahami Penyebab Dasar Error 521
Cloudflare bertindak sebagai reverse proxy — semua request dari pengunjung diteruskan ke origin server kamu. Ketika Cloudflare mengirim request ke origin dan mendapat respon Connection Refused, Error 521 muncul.
Penyebab umum:
| Penyebab | Keterangan |
|---|---|
| Web server mati | Nginx/Apache tidak berjalan |
| Firewall memblokir IP Cloudflare | Aturan iptables atau panel hosting terlalu ketat |
| Port tidak terbuka | Port 80/443 tertutup di firewall OS |
| IP binding salah | Web server hanya listen di 127.0.0.1, bukan 0.0.0.0 |
| Resource server habis | RAM/CPU penuh, proses web server crash |
Satu hal yang perlu kamu pahami: Error 521 selalu bermula dari sisi origin server. Cloudflare sendiri tidak bermasalah.
Langkah 1: Memastikan Origin Server Aktif dan Dapat Diakses
Langkah pertama adalah memastikan web server (Nginx, Apache, dll.) benar-benar berjalan.
Cek status web server via SSH:
# Untuk Nginx
sudo systemctl status nginx
# Untuk Apache
sudo systemctl status apache2
# Jika tidak berjalan, jalankan ulang
sudo systemctl restart nginx
sudo systemctl restart apache2
Cek apakah port 80/443 sedang listen:
# Lihat semua port yang sedang aktif
sudo ss -tlnp | grep -E ':80|:443'
# Atau menggunakan netstat
sudo netstat -tlnp | grep -E ':80|:443'
Output yang diharapkan jika server berjalan normal:
LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=1234,fd=6))
LISTEN 0 128 0.0.0.0:443 0.0.0.0:* users:(("nginx",pid=1234,fd=7))
Perhatikan kolom Local Address: harus 0.0.0.0:80, bukan 127.0.0.1:80. Jika hanya listen di localhost, Cloudflare tidak akan bisa menjangkaunya.
Perbaiki binding Nginx agar listen di semua interface:
# /etc/nginx/sites-available/default
server {
listen 80; # bukan listen 80 127.0.0.1;
listen [::]:80; # IPv6
server_name example.com;
root /var/www/html;
index index.html;
}
Jika kamu sedang membangun RESTful API — misalnya seperti yang dijelaskan di artikel Membangun RESTful API Sederhana dengan Go: Tutorial Step-by-Step — pastikan server kamu juga bind ke 0.0.0.0 bukan hanya localhost.
Langkah 2: Memeriksa Firewall dan Aturan Keamanan di Server
Ini adalah penyebab tersering Error 521 yang sering terlewat. Firewall di server memblokir IP milik Cloudflare.
Cek aturan iptables saat ini:
sudo iptables -L INPUT -n -v
Izinkan semua IP Cloudflare secara manual:
Cloudflare memiliki range IP resmi yang harus diizinkan masuk ke port 80 dan 443.
#!/bin/bash
# Script: allow_cloudflare.sh
# Izinkan semua range IP Cloudflare
CF_IPV4=(
"173.245.48.0/20"
"103.21.244.0/22"
"103.22.200.0/22"
"103.31.4.0/22"
"141.101.64.0/18"
"108.162.192.0/18"
"190.93.240.0/20"
"188.114.96.0/20"
"197.234.240.0/22"
"198.41.128.0/17"
"162.158.0.0/15"
"104.16.0.0/13"
"104.24.0.0/14"
"172.64.0.0/13"
"131.0.72.0/22"
)
for ip in "${CF_IPV4[@]}"; do
sudo iptables -I INPUT -p tcp -s "$ip" --dport 80 -j ACCEPT
sudo iptables -I INPUT -p tcp -s "$ip" --dport 443 -j ACCEPT
done
echo "Selesai: semua IP Cloudflare sudah diizinkan."
Jalankan script di atas:
chmod +x allow_cloudflare.sh
sudo ./allow_cloudflare.sh
Untuk UFW (Ubuntu Firewall):
# Cek status UFW
sudo ufw status verbose
# Izinkan port HTTP dan HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload
Langkah 3: Verifikasi Konfigurasi Web Server dan Jaringan
Setelah firewall dibenahi, pastikan konfigurasi web server tidak ada yang bermasalah.
Test konfigurasi Nginx:
sudo nginx -t
Output yang benar:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Uji koneksi langsung ke origin dari luar Cloudflare:
Cara cepat untuk bypass Cloudflare sementara adalah dengan mengakses origin IP langsung. Kamu bisa mendapatkan IP origin dari panel hosting atau dengan perintah berikut:
# Dari mesin lokal, tes koneksi langsung ke IP origin
curl -v --connect-timeout 10 http://<IP_ORIGIN_SERVER>/
# Atau gunakan header Host untuk simulasi virtual host
curl -v -H "Host: example.com" http://<IP_ORIGIN_SERVER>/
Jika request ini berhasil (HTTP 200), berarti server aktif tapi Cloudflare yang tidak bisa menjangkaunya — kemungkinan besar karena firewall memblokir IP Cloudflare.
Cek log error web server:
# Nginx
sudo tail -f /var/log/nginx/error.log
# Apache
sudo tail -f /var/log/apache2/error.log
Arsitektur Cloudflare sebagai proxy sangat mirip dengan pola Implementasi Facade Pattern di Proyek Nyata: Studi Kasus API Gateway Sederhana — di mana satu layer (Cloudflare) menjadi wajah tunggal yang meneruskan request ke backend. Jika backend gagal merespons, fasad pun tidak bisa berbuat banyak.
Langkah 4: Memeriksa Firewall di Level Cloud Provider
Selain firewall di OS server, banyak cloud provider (AWS, GCP, DigitalOcean, Vultr) memiliki firewall atau security group di level jaringan yang terpisah dari iptables.
Contoh untuk AWS EC2 — cek Security Group:
# Install AWS CLI jika belum ada
pip install awscli
# Lihat aturan inbound Security Group yang terpasang di instance
aws ec2 describe-security-groups \
--group-ids sg-xxxxxxxx \
--query 'SecurityGroups[*].IpPermissions'
Pastikan ada aturan yang mengizinkan traffic masuk di port 80 dan 443 dari 0.0.0.0/0 (atau minimal dari range IP Cloudflare).
Contoh untuk DigitalOcean — via doctl CLI:
# Install doctl
snap install doctl
# Lihat firewall yang aktif
doctl compute firewall list
# Tambahkan rule untuk HTTP dan HTTPS
doctl compute firewall add-rules <firewall-id> \
--inbound-rules "protocol:tcp,ports:80,address:0.0.0.0/0 protocol:tcp,ports:443,address:0.0.0.0/0"
Bayangkan kamu sedang membangun platform SaaS seperti layanan manajemen bisnis — firewall di dua lapisan (OS dan cloud) yang tidak selaras adalah jebakan yang sangat umum dialami developer saat pertama kali deploy ke cloud.
Contoh Kasus Nyata: Firewall Hosting Memblokir IP Cloudflare
Misalkan kamu menggunakan VPS dari provider lokal dan memasang fail2ban untuk keamanan. Tanpa konfigurasi tambahan, fail2ban bisa secara otomatis memblokir IP Cloudflare jika ada banyak request yang terdeteksi mencurigakan.
Masalah: Website tiba-tiba Error 521 setelah traffic naik.
Diagnosa:
# Cek apakah ada IP Cloudflare yang terblokir fail2ban
sudo fail2ban-client status nginx-http-auth
# Lihat banned IP
sudo iptables -L f2b-nginx-http-auth -n -v
Solusi: Whitelist IP Cloudflare di fail2ban:
# /etc/fail2ban/jail.local
[DEFAULT]
ignoreip = 127.0.0.1/8 ::1
173.245.48.0/20
103.21.244.0/22
103.22.200.0/22
141.101.64.0/18
108.162.192.0/18
190.93.240.0/20
188.114.96.0/20
197.234.240.0/22
198.41.128.0/17
162.158.0.0/15
104.16.0.0/13
104.24.0.0/14
172.64.0.0/13
131.0.72.0/22
Restart fail2ban setelah konfigurasi diubah:
sudo systemctl restart fail2ban
sudo fail2ban-client status
Bayangkan kamu sedang membangun aplikasi e-commerce seperti platform belanja online — lonjakan traffic saat promo besar bisa memicu false-positive di fail2ban dan memblokir IP Cloudflare secara tidak sengaja. Whitelist di atas mencegah hal tersebut.
Troubleshooting: Error yang Sering Muncul
Error 521 Hanya Terjadi Saat SSL Aktif (Port 443)
Penyebab: Sertifikat SSL di origin server expired atau tidak dikonfigurasi, tapi Cloudflare SSL mode diset ke “Full (Strict)”.
Solusi:
# Cek masa berlaku sertifikat SSL
sudo openssl x509 -in /etc/ssl/certs/your_cert.pem -noout -dates
# Perbarui sertifikat Let's Encrypt
sudo certbot renew --force-renewal
# Restart nginx setelah sertifikat diperbarui
sudo systemctl reload nginx
# Atau ubah SSL mode di Cloudflare ke "Flexible" sementara
# Dashboard Cloudflare → SSL/TLS → Overview → Flexible
Nginx Berjalan Tapi Masih 521
Penyebab: Nginx berjalan tapi konfigurasi server_name tidak cocok dengan domain yang diakses Cloudflare, sehingga request jatuh ke default server yang mengembalikan koneksi yang tidak valid.
Solusi:
# /etc/nginx/sites-available/example.com
server {
listen 80;
server_name example.com www.example.com; # pastikan sesuai dengan domain
# Jangan biarkan server_name kosong atau underscore (_)
location / {
try_files $uri $uri/ =404;
}
}
# Test konfigurasi sebelum reload
sudo nginx -t
# Reload nginx setelah perubahan
sudo nginx -s reload
Error 521 Intermittent (Muncul Hilang)
Penyebab: Server kekurangan resource — RAM penuh atau file descriptor limit tercapai, menyebabkan proses nginx crash secara periodik.
Solusi:
# Cek penggunaan RAM
free -h
# Cek penggunaan CPU
top -bn1 | head -20
# Cek file descriptor limit
ulimit -n
# Cek apakah nginx crash dengan melihat log sistem
sudo journalctl -u nginx --since "1 hour ago"
# Naikkan worker_connections di nginx jika diperlukan
# /etc/nginx/nginx.conf
events {
worker_connections 4096; # default 1024
}
Setelah mengubah konfigurasi:
sudo nginx -t && sudo systemctl reload nginx
Cloudflare Dashboard Menampilkan Origin Unreachable Tapi Server Hidup
Penyebab: Cloudflare hanya bisa mengakses origin lewat port tertentu yang didukung. Jika web server berjalan di port non-standar yang tidak didukung Cloudflare, koneksi akan selalu gagal.
Solusi:
# Port yang didukung Cloudflare (HTTP): 80, 8080, 8880, 2052, 2082, 2086, 2095
# Port yang didukung Cloudflare (HTTPS): 443, 2053, 2083, 2087, 2096, 8443
# Ubah di nginx ke port yang didukung
# /etc/nginx/sites-available/example.com
server {
listen 8080;
server_name example.com;
location / {
root /var/www/html;
index index.html;
}
}
# Simpan, test, dan reload
sudo nginx -t && sudo systemctl reload nginx
Error 521 Setelah Migrasi Server atau Ganti IP
Penyebab: Record DNS di Cloudflare masih mengarah ke IP lama. Cloudflare mencoba menghubungi IP yang sudah tidak aktif.
Solusi:
# Cek IP yang saat ini dikonfigurasi di DNS Cloudflare
# Buka Dashboard Cloudflare → DNS → Records
# Pastikan record A mengarah ke IP server baru
# Verifikasi dari terminal — bandingkan IP origin dengan IP di DNS
curl -s https://api.ipify.org # IP publik server saat ini
dig +short example.com @1.1.1.1 # IP yang dikonfigurasi di DNS Cloudflare
Jika berbeda, perbarui record A di dashboard Cloudflare dengan IP server yang baru.
Pertanyaan yang Sering Diajukan (FAQ)
Apa perbedaan Error 521 dan Error 522 di Cloudflare?
Error 521 terjadi ketika Cloudflare berhasil mencapai origin server tapi koneksi ditolak (Connection Refused). Error 522 terjadi ketika Cloudflare tidak mendapat respons sama sekali dalam batas waktu (Connection Timed Out). Keduanya berasal dari origin server, tapi 521 lebih sering disebabkan firewall atau web server yang mati, sedangkan 522 lebih ke masalah performa atau server yang lambat merespons.
Bagaimana cara mengecek apakah masalah ada di Cloudflare atau di server saya?
Cara paling mudah adalah dengan menonaktifkan proxy Cloudflare sementara. Di dashboard Cloudflare → DNS → klik ikon awan oranye di sebelah record A/AAAA menjadi abu-abu (DNS Only). Setelah propagasi, akses domain secara langsung. Jika website muncul normal, masalah ada di konfigurasi Cloudflare ↔ origin. Jika tetap error, masalah murni di server.
Mengapa Error 521 muncul hanya setelah traffic meningkat?
Ini biasanya tanda bahwa server kehabisan resource (RAM, CPU, atau file descriptor limit). Saat traffic normal, server masih bisa melayani. Saat lonjakan terjadi — misalnya seperti saat flash sale di aplikasi belanja online — proses web server bisa crash karena batas maksimum koneksi tercapai. Solusinya adalah scale up server atau optimasi konfigurasi worker di nginx.
Apakah saya harus whitelist semua IP Cloudflare setiap kali berubah?
Cloudflare menyediakan endpoint resmi yang selalu diperbarui: https://www.cloudflare.com/ips-v4/ dan https://www.cloudflare.com/ips-v6/. Kamu bisa membuat cron job yang secara otomatis mengunduh daftar terbaru dan memperbarui aturan firewall setiap minggu, sehingga tidak perlu update manual setiap kali Cloudflare menambah range IP baru.
Apa yang harus dilakukan jika Error 521 muncul di production saat jam sibuk?
Langkah darurat pertama: SSH ke server, cek status web server (systemctl status nginx), cek log (tail -f /var/log/nginx/error.log), dan restart jika mati (systemctl restart nginx). Jika server tidak bisa di-restart karena resource habis, pertimbangkan untuk sementara mengaktifkan Cloudflare “Under Attack Mode” di dashboard untuk menyaring traffic yang masuk sambil kamu investigasi lebih lanjut.
Kesimpulan
Error 521 memang terlihat misterius di awal, tapi sebenarnya sangat bisa didiagnosa secara sistematis. Intinya selalu sama: Cloudflare tidak bisa terhubung ke origin server. Mulai dari memastikan web server berjalan, membuka firewall untuk IP Cloudflare, memverifikasi konfigurasi listening address, memeriksa firewall di level cloud provider, hingga mengecek resource server — setiap langkah membawa kamu semakin dekat ke solusi.
Selamat belajar dan terus eksplorasi! Jika kamu masih menemui kendala, jangan ragu untuk membaca artikel-artikel lain di KamusNgoding dan terus praktikkan — setiap error yang berhasil kamu atasi adalah satu langkah maju sebagai developer yang lebih andal.