Cloudflare ile WooCommerce: Doğru Yapılandırma Rehberi

E-ticaret siteniz var, WooCommerce kullanıyorsunuz ve bir gün “Cloudflare kullansam mı?” diye düşünmeye başlıyorsunuz. Performans kazancı, DDoS koruması, ücretsiz SSL… Kulağa harika geliyor. Kuruyorsunuz, her şey mükemmel görünüyor. Sonra müşterilerden şikayetler gelmeye başlıyor: Sepet boşalıyor, ödeme sayfası çalışmıyor, admin paneline giremiyorsunuz. İşte bu yazı tam olarak bu senaryoyu önlemek için var.

WooCommerce, Cloudflare ile birlikte çalışabilen ama varsayılan Cloudflare ayarlarıyla ciddi sorun yaşayan bir platform. İkisini doğru şekilde yapılandırdığınızda inanılmaz bir kombinasyon elde ediyorsunuz. Yanlış yapılandırdığınızda ise müşteri kaybediyorsunuz.

Temel Sorun: Cache ve Dinamik İçerik Çakışması

Cloudflare’in temel işlevi statik içerikleri cache’lemek ve sunucunuza gelen isteği azaltmak. WooCommerce ise doğası gereği dinamik bir platform. Sepet, kullanıcı oturumu, stok durumu, anlık fiyat güncellemeleri… Bunların hiçbiri cache’lenmemeli.

Cloudflare bunu bilmiyor. Siz söylemezseniz, her şeyi cache’lemeye çalışıyor. Müşteri sepete ürün ekliyor, başka bir sayfaya geçiyor, Cloudflare cache’deki eski sayfayı sunuyor, sepet boş görünüyor. Ödeme adımında session kayboluyor, müşteri sayfayı kapatıp gidiyor.

Gerçek dünya senaryosu: Bir e-ticaret müşterimde Cloudflare’i standart şekilde etkinleştirdikten sonra dönüşüm oranı %60 düştü. İki gün içinde sorunu tespit edip düzelttik ama o iki günde ciddi satış kaybı yaşandı. Bu yazıdaki her adım o deneyimin ürünü.

Cloudflare DNS Kaydı Doğru Oluşturma

İlk adım DNS kayıtlarını doğru oluşturmak. Cloudflare’e geçerken proxy modunu (turuncu bulut) hangi kayıtlar için etkinleştireceğinizi iyi düşünmeniz gerekiyor.

Ana domain ve www kaydı için proxy modunu açıyorsunuz. Ama şunu unutmayın: Mail sunucusu, FTP, doğrudan sunucu erişimi gibi kayıtların proxy modunu kapatmanız gerekiyor.

# DNS kayıtlarını Cloudflare API üzerinden kontrol etmek için
# Zone ID'nizi ve API token'ınızı kullanın

curl -X GET "https://api.cloudflare.com/client/v4/zones/ZONE_ID/dns_records" 
     -H "Authorization: Bearer API_TOKEN" 
     -H "Content-Type: application/json" | python3 -m json.tool

Mail kayıtlarınızı kontrol edin. MX kayıtları zaten proxy’den geçmez ama A kaydı olarak tanımladığınız mail sunucusu varsa bunu gözden geçirin.

# Mevcut DNS kayıtlarını dig ile doğrulayın
# Proxy modundaki domain Cloudflare IP'si göstermeli

dig +short A siteniz.com
dig +short MX siteniz.com
dig +short A mail.siteniz.com

Page Rules ile Cache Kontrolü

Bu bölüm en kritik kısım. WooCommerce için bazı URL pattern’larının asla cache’lenmemesi gerekiyor.

Cloudflare panelinde Rules > Page Rules bölümüne gidin. Free planda 3 page rule hakkınız var, Pro planda 20. Eğer WooCommerce kullanıyorsanız Pro plana geçmeyi ciddi düşünün, çünkü en az 4-5 rule’a ihtiyacınız olacak.

Öncelikle şu URL’ler için “Cache Level: Bypass” kuralı oluşturmalısınız:

  • siteniz.com/wp-admin/* : Admin paneli
  • siteniz.com/wc-api/* : WooCommerce API endpoint’leri
  • siteniz.com/checkout* : Ödeme sayfası
  • siteniz.com/cart* : Sepet sayfası
  • siteniz.com/my-account* : Kullanıcı hesap sayfaları
  • siteniz.com/?wc-ajax=* : WooCommerce AJAX istekleri

Cloudflare’in yeni Cache Rules özelliği Page Rules’tan daha esnek ve daha güçlü. Modern kurulumlar için Cache Rules kullanmanızı öneririm.

# Cache Rules'u API üzerinden oluşturma örneği
# WooCommerce sayfaları için bypass kuralı

curl -X POST "https://api.cloudflare.com/client/v4/zones/ZONE_ID/rulesets" 
     -H "Authorization: Bearer API_TOKEN" 
     -H "Content-Type: application/json" 
     -d '{
       "name": "WooCommerce Cache Bypass",
       "kind": "zone",
       "phase": "http_request_cache_settings",
       "rules": [
         {
           "action": "set_cache_settings",
           "action_parameters": {
             "cache": false
           },
           "expression": "(http.request.uri.path contains "/checkout") or (http.request.uri.path contains "/cart") or (http.request.uri.path contains "/my-account") or (http.request.uri.path contains "/wp-admin") or (http.request.uri.query contains "wc-ajax")",
           "description": "WooCommerce dynamic pages - no cache"
         }
       ]
     }'

Cookie Tabanlı Cache Bypass

Cloudflare, cookie varlığına göre cache kararı verebiliyor. WooCommerce’in oturum cookie’leri varsa o kullanıcıya cache’li sayfa sunulmamalı. Bu en akıllıca yöntemlerden biri.

# Nginx tarafında da cookie kontrolü ekleyin
# /etc/nginx/sites-available/siteniz.com dosyanıza ekleyin

# WooCommerce cookie kontrolü
set $skip_cache 0;

# WooCommerce ve WordPress session cookie'leri
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session") {
    set $skip_cache 1;
}

# Cache bypass header'ı Cloudflare'e gönder
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;

# Cache-Control header'ını ayarla
add_header X-Cache-Status $upstream_cache_status;

Cloudflare tarafında da bu cookie’lere göre bypass kuralı oluşturun. Cache Rules bölümünde “Cache eligibility” ayarını şu şekilde yapılandırın:

# Cloudflare Cache Rule expression - cookie tabanlı bypass
# Bu expression'ı Cloudflare panelinde Cache Rules > Custom Filter Expression'a girin

(http.cookie contains "woocommerce_items_in_cart") or 
(http.cookie contains "woocommerce_cart_hash") or 
(http.cookie contains "wp_woocommerce_session") or 
(http.cookie contains "wordpress_logged_in")

SSL/TLS Ayarları ve Karışık İçerik Sorunu

WooCommerce’de ödeme güvenliği kritik. Cloudflare SSL ayarını yanlış yaparsanız ya site çalışmaz ya da gerçek anlamda güvensiz bir kurulum elde edersiniz.

Cloudflare SSL modunu Full (Strict) olarak ayarlayın. Sakın “Flexible” modunu kullanmayın. Flexible modda Cloudflare ile sunucunuz arasındaki trafik şifresiz gidiyor ve bu bir e-ticaret sitesi için kabul edilemez.

Full (Strict) modunun çalışması için sunucunuzda geçerli bir SSL sertifikası olması gerekiyor. Let’s Encrypt kullanıyorsanız bu zaten mevcut. Cloudflare Origin Certificate de kullanabilirsiniz.

# Sunucunuzda Let's Encrypt sertifikası varsa kontrol edin
sudo certbot certificates

# Cloudflare Origin Certificate oluşturmak için Cloudflare API
curl -X POST "https://api.cloudflare.com/client/v4/certificates" 
     -H "Authorization: Bearer API_TOKEN" 
     -H "Content-Type: application/json" 
     -d '{
       "hostnames": ["siteniz.com", "*.siteniz.com"],
       "requested_validity": 5475,
       "request_type": "origin-rsa",
       "csr": "YOUR_CSR_HERE"
     }'

WordPress’te de HTTPS’i düzgün tanımlamanız gerekiyor. wp-config.php dosyanıza şunları ekleyin:

# wp-config.php dosyasına eklenecek Cloudflare uyumlu ayarlar
# Bu satırları "That's all, stop editing!" satırından ÖNCE ekleyin

# Cloudflare proxy arkasında gerçek IP tespiti
if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) {
    $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP'];
}

# HTTPS tespiti - Cloudflare Flexible SSL için
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
    $_SERVER['HTTPS'] = 'on';
}

# Site URL'lerini tanımlayın
define('WP_HOME', 'https://siteniz.com');
define('WP_SITEURL', 'https://siteniz.com');

Firewall Kuralları ve Bot Koruması

WooCommerce siteleri bot saldırılarının favori hedefi. Cloudflare WAF kurallarını akıllıca kullanarak hem güvenliği artırabilir hem de sunucu yükünü azaltabilirsiniz.

# Cloudflare Firewall Rules - WooCommerce için önerilen kurallar
# Bu expression'ları Cloudflare Security > WAF > Custom Rules bölümüne ekleyin

# Kural 1: wp-login.php brute force koruması
# Ülke bazlı kısıtlama veya rate limiting uygulayın
# Expression:
(http.request.uri.path eq "/wp-login.php") and (not ip.src in {GUVENILIR_IP_LISTESI})

# Kural 2: xmlrpc.php tamamen engelle (WooCommerce için gerekmez)
# Expression:
(http.request.uri.path eq "/xmlrpc.php")

# Kural 3: Şüpheli User-Agent engelleme
# Expression:
(http.user_agent contains "sqlmap") or (http.user_agent contains "nikto") or (http.user_agent contains "havij")

Rate limiting özelliği WooCommerce için çok önemli. Checkout sayfasına yapılan aşırı istekleri sınırlayın. Bir IP adresi dakikada 10’dan fazla checkout isteği yapıyorsa bu ya bir bot ya da kart test eden biri.

# Rate Limiting kuralı oluşturma - API üzerinden
curl -X POST "https://api.cloudflare.com/client/v4/zones/ZONE_ID/rate_limits" 
     -H "Authorization: Bearer API_TOKEN" 
     -H "Content-Type: application/json" 
     -d '{
       "threshold": 10,
       "period": 60,
       "action": {
         "mode": "challenge",
         "timeout": 300
       },
       "match": {
         "request": {
           "url_pattern": "siteniz.com/checkout*",
           "methods": ["POST"],
           "schemes": ["HTTPS"]
         }
       },
       "description": "WooCommerce checkout rate limit"
     }'

Gerçek IP Adresi Sorunu ve Çözümü

Cloudflare proxy modunu açtıktan sonra sunucu loglarınıza baktığınızda tüm isteklerin Cloudflare IP’lerinden geldiğini görürsünüz. Bu WooCommerce’in fraud detection özelliklerini, geolocation tabanlı kargo fiyatlandırmasını ve admin güvenlik ayarlarını bozar.

Nginx için gerçek IP yapılandırması:

# /etc/nginx/conf.d/cloudflare-real-ip.conf dosyası oluşturun

# Cloudflare IPv4 aralıkları (düzenli güncelleyin)
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 104.16.0.0/13;
set_real_ip_from 104.24.0.0/14;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 131.0.72.0/22;

# Cloudflare IPv6 aralıkları
set_real_ip_from 2400:cb00::/32;
set_real_ip_from 2606:4700::/32;
set_real_ip_from 2803:f800::/32;
set_real_ip_from 2405:b500::/32;
set_real_ip_from 2405:8100::/32;
set_real_ip_from 2a06:98c0::/29;
set_real_ip_from 2c0f:f248::/32;

# CF-Connecting-IP header'ını kullan
real_ip_header CF-Connecting-IP;

# Nginx'i yeniden yükleyin
# sudo nginx -t && sudo systemctl reload nginx

Apache kullanıyorsanız mod_remoteip modülünü aktif edin:

# Apache için gerçek IP yapılandırması
# /etc/apache2/conf-available/cloudflare-remoteip.conf

<IfModule mod_remoteip.c>
    RemoteIPHeader CF-Connecting-IP
    RemoteIPTrustedProxy 173.245.48.0/20
    RemoteIPTrustedProxy 103.21.244.0/22
    RemoteIPTrustedProxy 103.22.200.0/22
    RemoteIPTrustedProxy 141.101.64.0/18
    RemoteIPTrustedProxy 108.162.192.0/18
    RemoteIPTrustedProxy 190.93.240.0/20
    RemoteIPTrustedProxy 188.114.96.0/20
    RemoteIPTrustedProxy 197.234.240.0/22
    RemoteIPTrustedProxy 198.41.128.0/17
    RemoteIPTrustedProxy 162.158.0.0/15
    RemoteIPTrustedProxy 104.16.0.0/13
    RemoteIPTrustedProxy 104.24.0.0/14
    RemoteIPTrustedProxy 172.64.0.0/13
    RemoteIPTrustedProxy 131.0.72.0/22
</IfModule>

# Modülü etkinleştir
# sudo a2enmod remoteip
# sudo a2enconf cloudflare-remoteip
# sudo systemctl reload apache2

WooCommerce Plugin Ayarları

Cloudflare’in resmi WordPress plugin’i var ve WooCommerce siteniz için bazı ayarları otomatik yapılandırıyor. Ama körü körüne güvenmeyin, manuel kontrol şart.

Plugin’i kurduktan sonra WooCommerce > Ayarlar > Gelişmiş > WooCommerce.com Abonelikleri bölümünden API bağlantısını doğrulayın.

WordPress admin panelinde Ayarlar > Cloudflare bölümünden şunları kontrol edin:

  • Automatic Cache Management: Açık olsun. Ürün güncellendiğinde, sipariş geldiğinde cache otomatik temizlenir.
  • Rocket Loader: WooCommerce ile sorun çıkarabilir. Kapatın veya dikkatli test edin.
  • Mirage: Görsel optimizasyonu. WooCommerce ürün görselleri için genellikle güvenli.
  • Polish: Görsel sıkıştırma. WebP dönüşümü dönüşüm oranını artırır.

Rocket Loader özellikle sorunlu. JavaScript’i asenkron yükliyor ama WooCommerce’in bazı script’leri sıralı yüklenmesi gerekiyor. Bir müşteride Rocket Loader yüzünden payment gateway tamamen çalışmıyordu, kapatınca sorun çözüldü.

Performans Optimizasyonu

Doğru yapılandırmayla WooCommerce’inizde ciddi performans kazancı elde edebilirsiniz. Statik içeriklerin agresif cache’lenmesi, ürün görselleri ve CSS/JS dosyaları için harika çalışıyor.

Browser cache TTL değerini ürün görselleri için uzun tutun. Cloudflare panelinde Caching > Configuration > Browser Cache TTL değerini 1 yıla ayarlayabilirsiniz statik dosyalar için.

HTTP/2 ve HTTP/3 özelliklerini açın. WooCommerce sayfaları çok sayıda kaynak yüklüyor ve HTTP/2 multiplexing bu konuda büyük fark yaratıyor. Cloudflare panelinde Speed > Optimization > Protocol Optimization bölümünden etkinleştirebilirsiniz.

Early Hints (103) özelliğini açın. Tarayıcı kritik kaynakları sunucu yanıtını beklemeden önceden yüklemeye başlıyor. Cloudflare bunu destekliyor ve WooCommerce checkout sayfaları için fark edilir hız artışı sağlıyor.

Sorun Giderme: Sık Karşılaşılan Durumlar

Sepet sıfırlanıyor: Yukarıdaki cookie tabanlı bypass kurallarını tekrar gözden geçirin. woocommerce_cart_hash ve woocommerce_items_in_cart cookie’leri doğru tanımlanmış mı kontrol edin.

Admin paneline giremiyorum: wp-admin için page rule veya cache rule oluşturduğunuzdan emin olun. Ayrıca Cloudflare’in Bot Fight Mode’u bazen meşru yönetici girişlerini engelleyebiliyor. Security > Bots bölümünden kontrol edin.

Ödeme sayfası hata veriyor: SSL modunu kontrol edin. Full (Strict) olmalı. Ayrıca payment gateway’in Cloudflare webhook URL’lerine ulaşıp ulaşamadığını test edin. Firewall kuralları webhook IP’lerini engelliyor olabilir.

Görsel yüklenmiyor, karışık içerik uyarısı: wp-config.php’deki HTTPS tanımlamalarını kontrol edin. Veritabanında hala http:// ile başlayan URL’ler varsa Better Search Replace plugin’i ile toplu değiştirin.

# Karışık içerik sorununu WP-CLI ile tespit edin
wp search-replace 'http://siteniz.com' 'https://siteniz.com' --dry-run --all-tables

# Sorun yoksa gerçekten çalıştırın
wp search-replace 'http://siteniz.com' 'https://siteniz.com' --all-tables

# Cache'i temizleyin
wp cache flush

Cloudflare error 521 veya 522: Sunucunuz Cloudflare’in IP bloğundan gelen bağlantıları reddediyor. Cloudflare IP aralıklarını sunucu firewall’ında whitelist’e alın:

# UFW ile Cloudflare IP'lerini izin ver
sudo ufw allow from 173.245.48.0/20 to any port 443
sudo ufw allow from 103.21.244.0/22 to any port 443
sudo ufw allow from 141.101.64.0/18 to any port 443
sudo ufw allow from 108.162.192.0/18 to any port 443
sudo ufw allow from 190.93.240.0/20 to any port 443
sudo ufw allow from 162.158.0.0/15 to any port 443
sudo ufw allow from 104.16.0.0/13 to any port 443
sudo ufw allow from 104.24.0.0/14 to any port 443
sudo ufw allow from 172.64.0.0/13 to any port 443
sudo ufw reload

Deploy Öncesi Checklist

Canlıya almadan önce şu kontrolleri yapın:

  • Sepete ürün ekleyin, başka sayfaya geçin, sepet korunuyor mu
  • Farklı tarayıcıdan checkout akışını başından sonuna test edin
  • Test ödemesi yapın (Stripe veya PayPal sandbox modunda)
  • Admin paneline giriş/çıkış yapın
  • Ürün stoğunu güncelleyin, cache temizleniyor mu
  • Cloudflare Analytics’ten cache hit ratio’yu kontrol edin, checkout sayfaları BYPASS görünmeli

Sonuç

Cloudflare ve WooCommerce mükemmel bir ikili olabilir, ama bunu başarmak için varsayılan ayarlarla geçip bırakmak yerine her detayı düşünmeniz gerekiyor. Cache bypass kuralları, gerçek IP tespiti, SSL modu, cookie tabanlı dinamik içerik yönetimi… Bunların hepsi birbirini tamamlayan parçalar.

En kritik nokta şu: Canlıya almadan önce mutlaka tam bir kullanıcı akışı testi yapın. Çünkü Cloudflare cache sorunu çoğunlukla yeni kullanıcıda ortaya çıkıyor, sizin oturumunuz açık olduğu için göremiyorsunuz. Farklı tarayıcı, farklı cihaz, gizli sekme… Hepsinden test edin.

Bu yapılandırmayı doğru yaptığınızda hem güvenli hem hızlı hem de ölçeklenebilir bir WooCommerce kurulumunuz oluyor. Sunucu maliyetiniz düşüyor, yükleme hızınız artıyor, DDoS saldırılarına karşı korunuyorsunuz. Biraz zaman harcamaya değer.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir