Cloudflare 524 Timeout Hatası: Kapsamlı Çözüm Rehberi
Cloudflare 524 hatası, sunucu 100 saniyede yanıt vermediğinde oluşur. PHP timeout, Nginx ayarları ve sorgu optimizasyonuyla çözün.
Cloudflare 524 Hatası Nedir?
Cloudflare 524 hatası "A Timeout Occurred" yani zaman aşımı oluştu anlamına gelir. 522 hatasından farklı olarak, bu hata Cloudflare'in kaynak sunucuya TCP bağlantısını başarıyla kurduğunu; ancak sunucunun 100 saniye (varsayılan Cloudflare timeout süresi) içinde HTTP yanıtı döndüremediğini gösterir. Bağlantı kurulmuş, istek iletilmiş fakat yanıt hiç gelmemiştir.
Bu durum genellikle kaynak sunucuda çok uzun süren işlemler nedeniyle yaşanır: karmaşık veritabanı sorguları, büyük dosya işlemleri, dışarıdan API çağrıları veya yoğun PHP hesaplamaları bunların başında gelir. E-ticaret siteleri, ERP entegrasyonları ya da büyük veri işleyen uygulamalar özellikle bu hatayla sık karşılaşır. Cloudflare Enterprise dışındaki planlarda bu 100 saniyelik limit değiştirilemez; dolayısıyla asıl çözüm sunucu tarafındaki performans sorunlarını gidermektir.
Olası Nedenler
- Uzun süren PHP işlemleri: max_execution_time sınırını aşan betikler.
- Yavaş veya kilitlenen veritabanı sorguları: INDEX eksikliği, deadlock veya büyük JOIN sorguları.
- Harici API çağrıları: Üçüncü taraf servisler yanıt vermediğinde uygulama bekler.
- Yüksek sunucu yükü: CPU/RAM yetersizliği nedeniyle işlemler kuyrukta bekler.
- PHP-FPM veya uWSGI işçi doyması: Tüm worker'lar meşgul, yeni istekler beklemede.
- Büyük dosya yükleme veya işleme: Video encode, görsel yeniden boyutlandırma gibi işlemler.
Çözüm Adımları
PHP Zaman Aşımı Ayarlarını Artırma
PHP'nin max_execution_time değerini artırarak uzun işlemlere izin verebilirsiniz. Ancak bu tek başına yeterli değildir; Cloudflare 100 sn limitini aşamazsınız.
# php.ini dosyasını bul
php --ini | grep "Loaded Configuration"
# max_execution_time değerini artır (örn: 300 saniye)
sudo nano /etc/php/8.2/fpm/php.ini
# max_execution_time = 300
# max_input_time = 300
# default_socket_timeout = 300
# PHP-FPM'i yeniden başlat
sudo systemctl restart php8.2-fpm
Nginx Ortamında Timeout Ayarları
Nginx'in PHP-FPM veya upstream backend ile olan timeout ayarlarını artırın.
sudo nano /etc/nginx/sites-available/siteniz.conf
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_read_timeout 300;
fastcgi_send_timeout 300;
fastcgi_connect_timeout 300;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# Proxy kullanıyorsanız
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_send_timeout 300;
sudo nginx -t && sudo systemctl reload nginx
Apache Ortamında Timeout Ayarları
Apache'nin kendi timeout direktifini ve PHP timeout'unu ayarlayın.
sudo nano /etc/apache2/apache2.conf
# Timeout 300
# .htaccess ile PHP değerlerini geçersiz kılma
# php_value max_execution_time 300
sudo systemctl restart apache2
MySQL Yavaş Sorgu Tespiti ve Optimizasyon
Veritabanı sorgularınızın performansını analiz edin.
# MySQL yavaş sorgu logunu aktifleştir
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
# slow_query_log = 1
# slow_query_log_file = /var/log/mysql/slow.log
# long_query_time = 2
sudo systemctl restart mysql
# Yavaş sorguları takip et
sudo tail -f /var/log/mysql/slow.log
# Gerçek zamanlı çalışan sorguları gör
mysql -u root -p -e "SHOW PROCESSLIST;"
# EXPLAIN ile sorgu analizi
# EXPLAIN SELECT * FROM buyuk_tablo WHERE kosul;
PHP-FPM Worker Sayısını Artırma
PHP-FPM pm.max_children değerini artırarak eş zamanlı işlem kapasitesini yükseltin.
sudo nano /etc/php/8.2/fpm/pool.d/www.conf
# pm = dynamic
# pm.max_children = 50
# pm.start_servers = 10
# pm.min_spare_servers = 5
# pm.max_spare_servers = 20
# pm.max_requests = 500
sudo systemctl restart php8.2-fpm
# FPM durumunu izle
sudo curl http://127.0.0.1/fpm-status?full 2>/dev/null || echo "fpm-status aktif değil"
Uzun İşlemleri Arkaplanda Çalıştırma (Queue/Job)
100 saniyelik Cloudflare limitini aşan işlemler için HTTP yanıtını hızlıca döndürün, işi bir queue sistemine atın.
# Laravel Horizon veya supervisor ile queue worker
sudo apt install supervisor -y
sudo nano /etc/supervisor/conf.d/laravel-worker.conf
# [program:laravel-worker]
# command=php /var/www/html/artisan queue:work --sleep=3 --tries=3
# autostart=true
# autorestart=true
sudo supervisorctl reread && sudo supervisorctl update
cPanel Ortamında
cPanel kullanıcıları WHM > MultiPHP INI Editor üzerinden PHP değerlerini düzenleyebilir.
# WHM > MultiPHP INI Editor > max_execution_time = 300
# cPanel > .htaccess dosyasına:
# php_value max_execution_time 300
# php_value max_input_time 300
Özet ve Önleyici Tedbirler
- Uzun süren işlemleri asenkron queue sistemlerine (Redis, RabbitMQ) taşıyın.
- Veritabanı tablolarınıza uygun INDEX'ler ekleyin; EXPLAIN ile sorgu planlarını analiz edin.
- New Relic, Blackfire veya Tideways gibi APM araçları ile yavaş kod bloklarını tespit edin.
- Cloudflare Enterprise kullanıyorsanız proxy_read_timeout artırımı için destek talep edebilirsiniz.
- Harici API çağrılarına timeout limiti koyun: curl_setopt($ch, CURLOPT_TIMEOUT, 30);
- Opcode cache (OPcache) aktif olduğundan emin olun; PHP derleme süresini azaltır.
İlgili Makaleler
Yorumlar
Henüz yorum yok. İlk yorumu siz yapın!