İçeriğe atla
Cloudflare Wiki

    gez · aç · Esc kapat

    Workers

    JavaScript, TypeScript veya Python kodunu Cloudflare’in 330+ şehirdeki sunucularında, hiçbir sunucu yönetmeden ve kullanıcıya en yakın noktada çalıştırır.

    • DurumGenel kullanımda
    • Fiyatİstek sayısı + CPU süresi (bekleme süresi ücretsiz)
    • Ücretsiz katmanvar
    • Doğrulama
    Cloudflare Workers mimarisi: internetten gelen istek Worker'a ulaşır, Worker önbellek, KV ve R2 ile konuşur, gerekirse origin sunucuya gider

    Workers nedir?

    Bir web isteği normalde şu yolu izler: kullanıcının tarayıcısı → DNS → (varsa CDN) → senin sunucun. Uygulama kodun o sunucuda, tek bir yerde çalışır. İstanbul’daki kullanıcı da, Berlin’deki kullanıcı da aynı makineye ulaşmak zorundadır.

    Workers bu şemayı değiştirir: kodunu bir sunucuya değil, Cloudflare’in ağının kendisine yüklersin. Kod, isteği ilk karşılayan şehirde çalışır. İstanbul’dan gelen istek İstanbul’da, Frankfurt’tan gelen istek Frankfurt’ta işlenir. Ortada yönetmen gereken bir makine, kurman gereken bir işletim sistemi, yamalaman gereken bir çekirdek yoktur.

    Pratikte bu üç şey demektir:

    • Sunucu yönetimi ortadan kalkar. Kapasite planlaması, otomatik ölçekleme grubu, yük dengeleyici yapılandırması, güvenlik yaması yoktur. Kodu yayına alırsın, gerisi Cloudflare’in sorumluluğundadır.
    • Gecikme düşer. Kod kullanıcıya coğrafi olarak yakın çalıştığı için, origin sunucuna gitmeyen istekler tek haneli milisaniyelerde yanıtlanır.
    • Boşta durmak bedava olur. Fatura, çalışan koda göre kesilir. Gece hiç istek gelmeyen bir servis için ödeme yapmazsın.

    Nasıl çalışır?

    Workers’ın diğer sunucusuz platformlardan (AWS Lambda, Google Cloud Functions) ayrıldığı temel nokta, konteyner değil izolat (isolate) kullanmasıdır.

    Klasik sunucusuz platformlar her fonksiyon için bir konteyner veya mikro-sanal makine başlatır. Bu birkaç yüz milisaniyeden birkaç saniyeye kadar süren bir soğuk başlangıç (cold start) demektir. Workers ise Chrome’un JavaScript motoru olan V8’in “isolate” mekanizmasını kullanır. Bir isolate, aynı süreç içinde çalışan ama belleği tamamen ayrılmış hafif bir bağlamdır; kurulumu milisaniyenin altında sürer.

    Bir isteğin ömrü şöyledir:

    1. İstek, kullanıcıya en yakın Cloudflare şehrine ulaşır.
    2. Cloudflare, o alan adına bağlı Worker’ı bulur ve bir isolate içinde fetch fonksiyonunu çağırır.
    3. Kod çalışır: gelen isteği okur, gerekirse KV’den veri okur, gerekirse origin sunucuna fetch atar, yanıtı oluşturur.
    4. Yanıt kullanıcıya döner. Worker isterse arka planda iş yapmaya devam eder (waitUntil).

    En basit haliyle bir Worker şudur:

    export default {
      async fetch(request, env, ctx) {
        return new Response("Merhaba İstanbul", {
          headers: { "content-type": "text/plain; charset=utf-8" },
        });
      },
    };

    Bağlantılar (bindings)

    Worker’ın dış dünyaya erişimi env nesnesi üzerinden, binding denen tanımlarla olur. Kodun içine bağlantı dizesi veya API anahtarı gömmezsin: wrangler.jsonc dosyasında hangi kaynağa erişeceğini bildirirsin, Cloudflare o kaynağı çalışma anında env içine koyar.

    export default {
      async fetch(request, env) {
        // Durable Object — adı verilen tek bir nesneye bağlan
        const id = env.GAME_ROOM.idFromName("oda-42");
        const oda = env.GAME_ROOM.get(id);
    
        // D1 — sunucusuz SQL
        const { results } = await env.DB.prepare(
          "select ad, puan from oyuncular order by puan desc limit 10",
        ).all();
    
        // R2 — nesne depolama
        const logo = await env.BRAND.get("logo.svg");
    
        return Response.json({ liderler: results });
      },
    };

    Yayına alırken wrangler, Worker’ın hangi kaynaklara bağlı olduğunu listeler. Aşağıdaki demo bölümünde bunun gerçek çıktısı var: solda kodun gördüğü ad (env.DB), sağda arkasındaki kaynak (D1 Database).

    Hata ayıklarken ilk bakılacak yer burasıdır: beklediğin bağlantı listede görünmüyorsa wrangler.jsonc düzenlenmiş ama yayına alınmamış demektir.

    CPU süresi ile bekleme süresi farkı

    Bu ayrım, Workers’ın faturasını anlamanın anahtarıdır ve yeni başlayanların en sık yanlış hesapladığı yerdir.

    • CPU süresi: İşlemcinin gerçekten senin kodunu çalıştırdığı süre. JSON ayrıştırma, imza doğrulama, şablon işleme.
    • Bekleme süresi (duration / wall-clock): Kodun bir yanıt beklediği süre. Origin sunucundan cevap beklemek, veritabanı sorgusunun dönmesini beklemek.

    Cloudflare yalnızca CPU süresini ücretlendirir. Origin sunucun 3 saniyede cevap veriyorsa, Worker o 3 saniye boyunca bekler ama sen o beklemeye para ödemezsin. Ödediğin, isteği hazırlamak ve yanıtı işlemek için harcanan birkaç milisaniyedir.

    Cloudflare paneli bu iki değeri yan yana gösterir. Demo bölümündeki metrik ekranında gerçek bir ölçüm var: CPU Time 865 µs, Wall Time 19 ms — yaklaşık 22 kat fark. Faturaya giren yalnızca soldaki.

    Ne zaman kullanılır, ne zaman kullanılmaz

    Bir referans kaynağının işi, ürünü satmak değil sınırlarını göstermektir. Workers her iş için doğru araç değildir.

    Uygun olduğu işler

    • Origin’in önünde kimlik doğrulama, yetkilendirme, token doğrulama
    • A/B testi, kademeli yayın (canary), bakım modu, coğrafi yönlendirme
    • İstek/yanıt dönüştürme: başlık ekleme, HTML enjeksiyonu, eski API’yi yeni şemaya çevirme
    • Webhook karşılama ve kuyruğa yazma
    • API birleştirme (birden çok iç servisi tek yanıtta toplama)
    • Statik site + hafif API (Pages ile birlikte)
    • Bot filtreleme, hız sınırlama, imzalı URL üretme

    Uygun olmadığı işler

    • Uzun süren, CPU yoğun hesaplama. Video kodlama, büyük veri işleme, makine öğrenmesi eğitimi. Çağrı başına CPU süresi üst sınırı vardır (ücretsizde 10 ms, ücretlide varsayılan 30 sn, en fazla 5 dk).
    • 128 MB’dan fazla bellek isteyen işler. İzolat başına bellek sınırı sabittir ve ücretli planda da artmaz.
    • Native ikili bağımlılık gerektiren kod. ImageMagick, ffmpeg, kendi derlediğin C kütüphanesi. Bunlar için Containers vardır.
    • Uzun ömürlü, havuzlanmış veritabanı bağlantıları. Ham TCP mümkündür (cloudflare:sockets) ama her çağrıda yeniden kurulum turu ödersin; PostgreSQL/MySQL için Hyperdrive kullan.
    • Disk üzerinde dosya sistemi bekleyen kod. Worker’ın yazılabilir bir diski yoktur; kalıcı veri için R2, KV, D1 veya Durable Objects kullanılır.

    Somut örnekler

    1. Şirket içi API’nin önüne kimlik katmanı

    Kendi veri merkezindeki bir API’yi internete açtın. Her isteğin geçerli bir imza taşımasını istiyorsun ve geçersiz isteklerin hiç iç ağa girmemesini tercih ediyorsun.

    export default {
      async fetch(request, env) {
        const imza = request.headers.get("x-imza");
        const zaman = request.headers.get("x-zaman");
    
        if (!imza || !zaman) {
          return yanit(401, "İmza başlıkları eksik");
        }
    
        // 5 dakikadan eski istekleri tekrar oynatma saldırısına karşı reddet
        const yas = Math.abs(Date.now() - Number(zaman));
        if (!Number.isFinite(yas) || yas > 5 * 60 * 1000) {
          return yanit(401, "İstek zaman aşımına uğradı");
        }
    
        const govde = await request.clone().text();
        if (!(await imzaDogru(env.PAYLASILAN_SIR, zaman + govde, imza))) {
          return yanit(403, "İmza geçersiz");
        }
    
        // Doğrulandı: isteği Cloudflare Tunnel üzerinden iç API'ye ilet
        return fetch(request);
      },
    };
    
    async function imzaDogru(sir, veri, beklenenHex) {
      const enc = new TextEncoder();
      const anahtar = await crypto.subtle.importKey(
        "raw",
        enc.encode(sir),
        { name: "HMAC", hash: "SHA-256" },
        false,
        ["verify"],
      );
      const bayt = Uint8Array.from(
        beklenenHex.match(/.{1,2}/g) ?? [],
        (b) => parseInt(b, 16),
      );
      return crypto.subtle.verify("HMAC", anahtar, bayt, enc.encode(veri));
    }
    
    function yanit(kod, mesaj) {
      return new Response(JSON.stringify({ hata: mesaj }), {
        status: kod,
        headers: { "content-type": "application/json; charset=utf-8" },
      });
    }

    Kazanç: geçersiz istekler İstanbul’daki Cloudflare sunucusunda ölür, senin hattını ve sunucunu hiç meşgul etmez.

    2. Bakım modu — origin’e dokunmadan

    Sunucuda planlı bakım var. Uygulamayı durdurmadan, kullanıcıya düzgün bir sayfa göstermek istiyorsun.

    export default {
      async fetch(request, env) {
        // BAKIM değişkeni Cloudflare panelinden anında açılıp kapanır
        if (env.BAKIM === "acik") {
          const ip = request.headers.get("cf-connecting-ip");
          const ofisIp = ["203.0.113.10"]; // ofis çıkışı bakımda da erişebilsin
    
          if (!ofisIp.includes(ip)) {
            return new Response(BAKIM_HTML, {
              status: 503,
              headers: {
                "content-type": "text/html; charset=utf-8",
                "retry-after": "1800",
                "cache-control": "no-store",
              },
            });
          }
        }
        return fetch(request);
      },
    };
    
    const BAKIM_HTML = `<!doctype html><html lang="tr"><meta charset="utf-8">
    <title>Bakım çalışması</title>
    <h1>Kısa bir bakım çalışması yapıyoruz</h1>
    <p>Yaklaşık 30 dakika içinde geri döneceğiz.</p>`;

    503 ve retry-after başlığı önemlidir: arama motorları bunu geçici durum olarak okur, sıralamanı düşürmez.

    3. Coğrafi yönlendirme

    Cloudflare her isteğe request.cf nesnesiyle ülke, şehir ve veri merkezi bilgisi ekler. Ek bir GeoIP veritabanı kurmana gerek yoktur.

    export default {
      async fetch(request) {
        const ulke = request.cf?.country ?? "XX";
        const url = new URL(request.url);
    
        // Türkiye'den gelen ve dil seçmemiş kullanıcıyı /tr/ altına al
        if (ulke === "TR" && url.pathname === "/") {
          return Response.redirect(new URL("/tr/", url), 302);
        }
        return fetch(request);
      },
    };

    4. Yanıtı kenarda önbellekleme

    Origin’in ürettiği pahalı bir yanıtı Cloudflare’in kendi önbelleğinde tutarsın.

    export default {
      async fetch(request, env, ctx) {
        const onbellek = caches.default;
        const vurus = await onbellek.match(request);
        if (vurus) return vurus;
    
        const yanit = await fetch(request);
        const kopya = new Response(yanit.body, yanit);
        kopya.headers.set("cache-control", "public, max-age=300");
    
        // Yanıtı kullanıcıya hemen gönder, önbelleğe yazmayı arka planda bitir
        ctx.waitUntil(onbellek.put(request, kopya.clone()));
        return kopya;
      },
    };

    ctx.waitUntil burada kritiktir: yanıt kullanıcıya gecikmeden gider, önbelleğe yazma işlemi arka planda tamamlanır.

    Demo 1: on-prem API’nin önüne Workers katmanı

    Bu demoyu birlikte kuracağız. Hedef mimari:

    Kullanıcı  →  Cloudflare Edge (Worker: imza + hız sınırı)
                        ↓  Cloudflare Tunnel
                  On-prem sunucu (iç API, internete kapalı)

    Kurulum adımları:

    # 1) Proje oluştur
    npm create cloudflare@latest -- onprem-kapi
    cd onprem-kapi
    
    # 2) Paylaşılan sırrı gizli değişken olarak yaz (kod deposuna girmez)
    npx wrangler secret put PAYLASILAN_SIR
    
    # 3) Yerelde çalıştır — gerçek workerd çalışma zamanıyla
    npx wrangler dev
    
    # 4) Yayına al
    npx wrangler deploy
    wrangler deploy çıktısı: yüklenen boyut, başlangıç süresi ve Durable Object, D1, R2, Assets bağlantılarını listeleyen tablo
    Cloudflare panelinde Worker metrikleri: 307 çağrı, 216 alt istek, 0 hata, CPU Time 865 mikrosaniye, Wall Time 19 milisaniye

    Demo 2: Statik site + API tek Worker’da

    Bu demo, Cloudflare’in yeni projeler için Pages yerine Workers önermesinin somut karşılığını gösterir: aynı Worker hem statik dosyaları sunar hem API’yi çalıştırır.

    Adım 1 — Projeyi oluştur

    npm create cloudflare@latest -- uygulamam --framework=react
    {
      "name": "uygulamam",
      "main": "src/worker.js",
      "compatibility_date": "2026-08-31",
      "observability": { "enabled": true },
      "assets": {
        "directory": "./dist",
        "binding": "ASSETS",
        "not_found_handling": "single-page-application"
      }
    }
    export default {
      async fetch(request, env) {
        const url = new URL(request.url);
        if (url.pathname.startsWith("/api/")) {
          return Response.json({ saat: new Date().toISOString() });
        }
        // Statik dosya bulunamazsa index.html dönsün (SPA)
        return env.ASSETS.fetch(request);
      },
    };
    Terminal — bindings listesinde ASSETS satırı ve http://localhost:8787 adresi (Pages'in 8788'i değil)

    Adım 2 — Yönlendirme sırasını doğrula

    curl -s http://localhost:8787/api/saat        # Worker çalışır
    curl -sI http://localhost:8787/               # statik dosya döner
    curl -sI http://localhost:8787/derin/yol      # SPA: index.html döner
    Üç curl çıktısı — API yanıtı, statik dosya başlıkları ve SPA fallback'inin index.html döndürmesi

    Adım 3 — Middleware davranışını test et

    run_worker_first kapalıyken Worker’ın statik dosya isteklerini görmediğini kanıtla.

    wrangler tail — statik dosya istekleri sırasında hiç log düşmediği, yalnızca /api/ isteklerinin göründüğü
    Aynı test run_worker_first açıkken — bu kez statik istekler de log'da görünüyor

    Adım 4 — Yayına al ve önbellek başlıklarını incele

    npx wrangler deploy
    curl -sI https://<worker>/ | grep -iE 'cache-control|etag|cf-cache-status'
    curl -I çıktısı — Cache-Control, ETag ve CF-Cache-Status (HIT/MISS) başlıkları
    Metrics ekranı — Asset requests ve Invocations sayaçlarının yan yana farkı; statik isteklerin çağrı sayılmadığı

    Ölçüm

    ÖlçütDeğer
    Statik istek sayısı
    Worker çağrısı sayısı
    Statik isteklerin faturaya etkisi
    run_worker_first açıkken çağrı artışı
    İlk bayta kadar süre (statik / API)

    Fiyatlandırma

    Aşağıdaki rakamlar 31 Ağustos 2026 tarihinde Cloudflare’in resmî fiyatlandırma sayfasından doğrulanmıştır.

    ÜcretsizÜcretli (Standard)
    Aylık taban ücret0 USD5 USD
    İstekGünde 100.000Ayda 10 milyon dahil, sonrası milyon başına 0,30 USD
    CPU süresiÇağrı başına en fazla 10 msAyda 30 milyon CPU ms dahil, sonrası milyon CPU ms başına 0,02 USD
    Bekleme süresiÜcretlendirilmezÜcretlendirilmez, sınır yok
    Çağrı başına CPU üst sınırı10 msVarsayılan 30 sn, en fazla 5 dk
    Betik boyutu (sıkıştırılmış)3 MB10 MB
    Bellek (izolat başına)128 MB128 MB
    İstek başına alt istek5010.000
    Hesap başına Worker100500
    Hesap başına Cron tetikleyici5250
    Statik dosya istekleriÜcretsiz ve sınırsızÜcretsiz ve sınırsız

    İki gerçek hesap

    Örnek A — orta ölçekli haber sitesi

    • Günde 300.000 istek → ayda 9 milyon istek (10 milyon dahil sınırının altında)
    • İstek başına ortalama 3 ms CPU → ayda 27 milyon CPU ms (30 milyon dahil sınırının altında)
    • Aylık toplam: 5 USD

    Örnek B — yoğun bir API ağ geçidi

    • Günde 2 milyon istek → ayda 60 milyon istek
    • İstek başına ortalama 5 ms CPU → ayda 300 milyon CPU ms
    KalemHesapTutar
    Taban5,00 USD
    Fazla istek(60 − 10) milyon × 0,30 USD15,00 USD
    Fazla CPU(300 − 30) milyon ms × 0,02 USD5,40 USD
    Toplam25,40 USD / ay

    Aynı yükü kendi sunucunda karşılamak, yedekli iki sanal makine, bir yük dengeleyici ve bunların bakımı demektir. Karşılaştırmayı yaparken sadece sunucu kirasını değil, işletim maliyetini de hesaba kat.

    Lisanslama ve hukuki çerçeve

    Bu bölüm, kurumsal satın alma ve hukuk birimlerinin en çok sorduğu noktaları toplar.

    Hizmetin lisansı. Cloudflare Workers tescilli bir hizmettir. Kullanımı Cloudflare Hizmet Şartları ve Kabul Edilebilir Kullanım Politikası ile düzenlenir. Kaynak kodu size lisanslanmaz; hizmete abone olursunuz.

    Çalışma zamanı açık kaynaktır. Workers’ı çalıştıran motor olan workerd, Apache 2.0 lisansıyla GitHub’da yayımlanır. Bu pratikte şu anlama gelir: kodunu yerelde wrangler dev ile üretimdekiyle aynı çalışma zamanında test edebilirsin ve teorik olarak workerd’i kendi altyapında çalıştırabilirsin. Ancak KV, R2, D1 gibi bağlı servisler ve global ağın kendisi açık kaynak değildir — tam bir kendi kendine barındırma seçeneği yoktur.

    Yazdığın kod sana aittir. Worker’ına yüklediğin kodun mülkiyeti sende kalır. Cloudflare, hizmeti sunmak için gerekli olan işleme hakkını alır.

    Veri işleme ve KVKK. Kurumsal kullanımda ilgili belgeler Cloudflare’in Veri İşleme Ek Sözleşmesi ve alt işleyici listesidir. Trafiğin hangi coğrafyada işleneceğini kısıtlamak isteyen kurumlar için Data Localization Suite adında ayrı ücretlendirilen bir eklenti bulunur; standart Workers kullanımında kod, isteği karşılayan herhangi bir şehirde çalışabilir.

    Sık yapılan hatalar

    await edilmeyen sözler (floating promise). Yanıtı döndürdükten sonra biten bir iş varsa mutlaka ctx.waitUntil() içine alın. Aksi halde Worker yanıtı gönderdiği anda kapanır ve iş yarım kalır.

    Genel (global) kapsamda durum tutmak. İzolatlar isteğe göre oluşturulup yok edilir ve farklı kullanıcılar aynı izolatı paylaşabilir. Genel değişkende kullanıcıya özel veri tutmak, veriyi başka kullanıcıya sızdırır. Kullanıcı durumu için Durable Objects veya KV kullanın.

    Sırları kodun içine yazmak. API anahtarları wrangler secret put ile saklanır, wrangler.jsonc içindeki vars alanına değil. vars içeriği yayına alınan pakette açık metin olarak durur.

    Gövdeyi iki kez okumak. request.body tek kullanımlık bir akıştır. Hem imza doğrulaması hem de iletme için gerekiyorsa request.clone() kullanın.

    Yanıtı tamamen belleğe almak. Büyük yanıtları await response.text() ile toplamak yerine akış olarak geçirin; 128 MB bellek sınırına takılmadan ve ilk baytı geciktirmeden çalışır.

    Sıkça sorulan sorular

    Workers ile AWS Lambda arasındaki fark nedir?
    Üç temel fark var. Soğuk başlangıç: Lambda her çağrı için mikro sanal makine ayağa kaldırır (yüzlerce ms); Workers V8 izolatı kullanır, kurulum milisaniyenin altındadır. Konum: Lambda seçtiğin tek bir bölgede çalışır; Workers isteği karşılayan şehirde çalışır. Faturalama: Lambda bekleme süresini de ücretlendirir; Workers yalnızca CPU süresini ücretlendirir. Buna karşılık Lambda daha fazla bellek, daha uzun çalışma süresi ve native ikili çalıştırma imkânı sunar.
    Ücretsiz plan gerçekten üretimde kullanılabilir mi?
    Günde 100.000 istek ve çağrı başına 10 ms CPU sınırıyla, düşük trafikli siteler ve iç araçlar için evet. Ancak çağrı başına 10 ms CPU sınırı gerçek bir kısıttır: JSON şablonlama veya imza doğrulama gibi işlerde bu sınıra takılabilirsin. Ayda 5 USD ödeyerek geçtiğin ücretli plan bu sınırı 30 saniyeye çıkarır — üretim kullanımı için ilk yükseltme kalemi budur.
    Alan adımı Cloudflare’e taşımadan Workers kullanabilir miyim?
    Kısmen. Her Worker otomatik olarak bir *.workers.dev adresi alır ve bunu hemen kullanabilirsin. Kendi alan adında çalıştırmak için ise alan adının DNS’inin Cloudflare üzerinde olması gerekir — yani ad sunucularını Cloudflare’e yöneltmen gerekir. Alan adını taşımana (registrar değiştirmene) gerek yoktur, yalnızca DNS yönetimini devretmen yeterlidir.
    Mevcut Node.js kütüphanelerimi kullanabilir miyim?
    Saf JavaScript olanların çoğu çalışır. fs, net gibi Node çekirdek modüllerine dayananlar için nodejs_compat uyumluluk bayrağını açman gerekir ve bu bayrak da her modülü karşılamaz. Native derlenmiş eklenti (.node dosyası) içeren paketler çalışmaz; bunlar için Containers kullanılır.
    Türkiye’de Cloudflare noktası var mı? Gecikme ne kadar olur?
    Evet, hatta iki tane: Cloudflare’in ağ sayfasındaki şehir listesinde Türkiye’den İstanbul ve İzmir geçiyor. İstanbul 2018’de açıldı ve o tarihte şirketin 124. veri merkeziydi. Ancak Türkiye’den gelen trafiğin oraya düşeceğinin garantisi yok: belirleyici olan operatörün peering yapılandırmasıdır. Bu portalı hazırlarken iki ayrı Türk hattından ölçtük, biri Frankfurt’a biri Milano’ya düştü. Kendi hattını ölç: curl -s https://alanadin/cdn-cgi/trace | grep colo
    Worker’ım şirket içindeki veritabanıma nasıl bağlanır?
    Worker ham TCP açabilircloudflare:sockets modülündeki connect() API’si bunun içindir; Hyperdrive de zaten bunun üzerine kuruludur. Ama ham soket doğru çözüm değildir: stateless bir isolate her çağrıda TCP el sıkışması, TLS ve kimlik doğrulama için yedi tur atmak zorunda kalır. Pratik yollar şunlar: (1) Hyperdrive — bağlantı havuzunu veritabanına yakın tutar, kurulum turlarını kenarda tamamlar. (2) Cloudflare Tunnel — iç ağdaki HTTP API’yi güvenlik duvarında port açmadan yayınlar. (3) Workers VPC — bulut sağlayıcının private network’üne bağlanır. Şirket içi PostgreSQL için Hyperdrive + Tunnel birlikte kullanılır.
    Workers Static Assets nedir, Pages'ten farkı ne?
    Workers artık statik dosyaları da sunabiliyor — assets.directory ile bir klasörü işaret edersin, Cloudflare hem Worker kodunu hem dosyaları tek deploy'da yayına alır. Kritik davranış farkı: Workers'ta önce statik dosya aranır, bulunamazsa Worker çalışır. Pages'te sıra terstir (önce Function). Auth kontrolü gibi her isteği görmesi gereken bir katmanın varsa run_worker_first ayarını açman gerekir.
    Statik dosya istekleri için ücret ödüyor muyum?
    Hayır. Resmî ifade: “Requests to static assets are free and unlimited.” Depolama için de ek ücret yok: “There is no additional cost for storing Assets.” Tek istisna: Workers Caching açıksa cache'ten servis edilen istekler normal istek ücretiyle faturalanır — bu, aynı fiyat sayfasındaki iki dipnotun birbirini nitelemesinden doğan bir incelik.
    Cron Trigger ile zamanlanmış iş çalıştırabilir miyim?
    Evet. triggers.crons ile UTC bazlı zamanlama tanımlar, scheduled handler'ı yazarsın. Sınırlar: hesap başına ücretsizde 5, ücretlide 250 tetikleyici. Duvar saati sınırı 15 dakika. Değişikliklerin yayılması 15 dakikayı bulabilir. 15 dakikayı aşan işler için Workflows'a bak.
    Kaç Worker deploy edebilirim?
    Hesap başına ücretsizde 100, ücretlide 500. Ayrıca rollback derinliği sınırlıdır: “You can only roll back to the 100 most recently published versions.” Rollback binding'leri geri almaz — resmî ifade: “Resources connected to your Worker will not be changed during a rollback.”
    Beklenmedik bir fatura ile karşılaşabilir miyim?
    Workers’ta kullanımı otomatik durduran sabit bir harcama tavanı yoktur; trafik artarsa fatura da artar. Korunmak için üç şey yapabilirsin: Cloudflare panelinden fatura bildirimi kurmak, Worker’ın önüne hız sınırlama (Rate Limiting) koymak ve kodun içinde günlük istek sayacını KV üzerinde tutup eşik aşılınca erken yanıt dönmek. Ücretsiz planda ise sınır aşıldığında Worker çalışmayı durdurur, fatura oluşmaz.
    Python desteği üretimde kullanılabilir durumda mı?
    Python Workers mevcuttur ancak JavaScript/TypeScript ile aynı olgunlukta değildir. Paket desteği sınırlıdır ve soğuk başlangıç davranışı farklıdır. Yeni bir proje başlatıyorsan ve özel bir Python gereksinimin yoksa TypeScript ile başlamak daha az sürprizle sonuçlanır.

    İlgili servisler

    • Durable ObjectsHer nesnenin tek bir instance’ı olan, state tutan compute; sohbet odası, oyun oturumu, sayaç gibi işler için.
    • Workers KVOkuma ağırlıklı, global olarak replike edilen key-value store.
    • R2S3 uyumlu object storage — çıkış (egress) trafiği ücretsiz.
    • D1Workers’a bağlanan serverless SQLite veritabanı.
    • Cloudflare TunnelŞirket içi sunucunu, güvenlik duvarında port açmadan Cloudflare’e giden bir tünelle yayınlar.
    • PagesGit deposuna push ettiğinde frontend sitesini build edip global olarak yayına alır.

    Bu sayfadaki fiyat ve özellik bilgileri 31 Ağustos 2026 tarihinde Cloudflare’in resmî kaynaklarından doğrulanmıştır. Cloudflare fiyatlandırmasını önceden haber vermeden değiştirebilir; bağlayıcı bilgi içinresmî sayfaya bakın.

    Hata bildir

    Yanlış bir rakam, eskimiş bir bilgi veya bozuk bir bağlantı mı buldun? Bildir, kaynağıyla birlikte kontrol edelim.