---
title: 'Web Sunucusu Rolleri'
source: 'https://academia.sh/tr/kurslar/sunucu-ve-sertlestirme/web-sunucusu-rolleri'
course: 'Sunucu, Ağ ve Sertleştirme'
language: tr
updated: '2026-08-17T18:09:10+00:00'
license: 'CC BY-SA 4.0'
---

# Web Sunucusu Rolleri

Statik sunum, ters vekil ve yük dağıtımı rollerinin varsayılan kurulumdan sonra açık bıraktığı yüzey: on sekiz kalemin rol rol sayımı, üç rolü tek süreçte birleştirmenin on dört benzersiz kalemi on yediye çıkarması ve dış kapıdan erişilebilir kalem sayısını ondan on yediye taşıması, dört sertleştirme adımının kapattığı on üç kaleme karşılık durdurduğu dört meşru iş ve geriye kalan dört kapatılamayan kalem.

Önceki kurs sistemi görünür yaptı: ölçüm noktaları kondu, kayıtlar bir yerde toplandı, uyarılar
bir nöbetçiye ulaştı, olayın kim tarafından nasıl kapatıldığı yazıldı. Görünürlük kurulunca
görülen şey de değişti — panolar uygulamanın davranışını gösteriyor, ama uygulamanın **üstünde
durduğu makine** hakkında hiçbir şey söylemiyor.

O makine bir gün kuruldu ve kurulduğu gün ne verildiyse onunla duruyor. Paket açıldı, süreç
başlatıldı, istekler akmaya başladı ve iş görünce kimse bir daha bakmadı. Bu ders o bakışı bir
sayıya çevirir: kurulumdan sonra hiçbir şey yapılmadığında **kaç kalem açık kalır**.

Ölçü birimi **açık yüzey kalemi**dir. Bir kalem, dışarıdan ya da içeriden erişilebilen tek bir
şeydir: dinlenen bir kapı, sunulan bir yol, yanıtta görünen bir bilgi, kimlik sorulmayan bir
yönetim ucu. Kalem sayısı bir güvenlik notu değildir; bir sayımdır ve sayım yapılmadan hiçbir
sertleştirme adımı savunulamaz.

## Üç Rol Ayrı Ayrı

Bir web sunucusu üç işten birini ya da üçünü birden yapar.

**Statik sunum** diskteki dosyayı isteğe karşılık verir. Girdi bir yol, çıktı bir dosyadır;
arada uygulama kodu yoktur. **Ters vekil** isteği alır, kendi bir şey üretmez ve arkadaki bir
yukarı akışa iletir; yanıtı geri taşır. **Yük dağıtımı** aynı işi birden çok yukarı akış üyesi
arasında böler; hangi üyenin ayakta olduğunu izler ve düşeni havuzdan çıkarır. Üç rolün de ne
olduğu daha önce kurulmuştu; bu ders rolleri yeniden tanımlamaz, **kurulum sonrası bıraktıkları
kalemi** sayar.

Sayım kurgu bir sistem üzerinde yapılır: bölgesel bir su sayacı ölçüm ağı. Saha ekipleri el
terminalleriyle sayaç okur, bir toplayıcı okumaları alır, bir doğrulayıcı denetler, faturalama
ve iş emri servisleri devralır. Üç ortam vardır ve gecelik bir toplu iş koşar. Sistem de
sayılar da kurgudur; ölçülen, sayıların birbirine oranıdır.

- **WS1.** Kalem listesi bir ürünün varsayılan yapılandırma dosyasından okunmaz; kurulum sonrası
  tipik olarak açık kalan şeylerin kurgu bir listesidir. Ölçülen liste değil, listeden çıkan orandır.
- **WS2.** Bir kalem "dış" ise genel kapıdan, "iç" ise yalnız iç ağdan erişilir. Ayrı süreçlerde
  bu ayrım süreç sınırıyla korunur.
- **WS3.** Meşru iş akışı, bir kalem kapandığında duran gerçek bir işi temsil eder; altı akış
  vardır ve her biri tek bir kaleme yaslanır.
- **WS4.** Paylaşım anahtarı aynı olan kalemler birleştirmede tek kaleme iner: üç rolün de
  dinlediği şifresiz kapı tek kapıdır, üçünün de bastığı sürüm başlığı tek başlıktır.

```js
// roller/yuzey.mjs — model: uc web sunucusu rolunun varsayilan kurulumundan sonra acik
// kalan yuzey kalemleri. Gercek bir urunun varsayilan dosyasi degil, kurgu olcum aginin
// kurulum sonrasi kalem listesidir; butun sayilar bu listeden turetilir.

// [rol, kalem, tur, erisim, paylasim anahtari]
const KALEM = [
  ["statik",  "sifresiz-kapi",       "dinlenen kapi", "dis", "kapi-80"],
  ["statik",  "varlik-kok",          "sunulan yol",   "dis", null],
  ["statik",  "dizin-listesi",       "sunulan yol",   "dis", null],
  ["statik",  "yedek-dosyalar",      "sunulan yol",   "dis", null],
  ["statik",  "ornek-sayfa",         "sunulan yol",   "dis", null],
  ["statik",  "surum-basligi",       "gorunen bilgi", "dis", "surum"],

  ["vekil",   "sifresiz-kapi",       "dinlenen kapi", "dis", "kapi-80"],
  ["vekil",   "sifreli-kapi",        "dinlenen kapi", "dis", null],
  ["vekil",   "yukari-akis-kapisi",  "dinlenen kapi", "ic",  null],
  ["vekil",   "surum-basligi",       "gorunen bilgi", "dis", "surum"],
  ["vekil",   "hata-sayfasi-izi",    "gorunen bilgi", "dis", null],
  ["vekil",   "vekil-durum-ucu",     "yonetim ucu",   "ic",  null],

  ["dagitim", "sifresiz-kapi",       "dinlenen kapi", "dis", "kapi-80"],
  ["dagitim", "surum-basligi",       "gorunen bilgi", "dis", "surum"],
  ["dagitim", "uye-adresi-basligi",  "gorunen bilgi", "dis", null],
  ["dagitim", "oturum-cerezi-uye",   "gorunen bilgi", "dis", null],
  ["dagitim", "saglik-ucu",          "yonetim ucu",   "ic",  null],
  ["dagitim", "uye-yonetim-ucu",     "yonetim ucu",   "ic",  null],
];

// Tek surecte birlestirmenin dogurdugu, hicbir rolde tek basina bulunmayan kalemler.
const BIRLESME = [
  ["birlesik", "capraz-kok",           "sunulan yol",   "dis"],
  ["birlesik", "ortak-yonetim-kapisi", "yonetim ucu",   "dis"],
  ["birlesik", "tek-surec-kimligi",    "birlesik yetki","dis"],
];

// Mesru is akislari: her akis hangi kaleme yaslaniyor.
const AKIS = [
  ["el-terminali-okuma",   "statik/sifresiz-kapi"],
  ["saha-varlik-sunumu",   "statik/varlik-kok"],
  ["toplayici-yuklemesi",  "vekil/sifreli-kapi"],
  ["nobetci-saglik-cagrisi","dagitim/saglik-ucu"],
  ["dagitim-akisi",        "dagitim/uye-yonetim-ucu"],
  ["oturum-yapiskanligi",  "dagitim/oturum-cerezi-uye"],
];

const kimlik = (r, k) => `${r}/${k}`;
const roller = ["statik", "vekil", "dagitim"];

const EN = [10, 7, 10, 9, 9, 9, 6, 5];
const satir = (h) => h.map((d, i) => String(d)[i ? "padStart" : "padEnd"](EN[i])).join("");
const olc = (s) => [s.length, ...["dinlenen kapi", "sunulan yol", "gorunen bilgi", "yonetim ucu"]
  .map((t) => s.filter((x) => x[2] === t).length),
  s.filter((x) => x[3] === "dis").length, s.filter((x) => x[3] === "ic").length];

console.log(satir(["rol", "kalem", "dinlenen", "sunulan", "gorunen", "yonetim", "dis", "ic"]));
for (const rol of roller) console.log(satir([rol, ...olc(KALEM.filter((x) => x[0] === rol))]));
console.log(satir(["toplam", ...olc(KALEM)]));

// Birlestirme: paylasim anahtari ayni olan kalemler tek kaleme iner.
const gorulen = new Set();
const tekil = [];
for (const [rol, kalem, tur, erisim, pay] of KALEM) {
  const anahtar = pay ?? kimlik(rol, kalem);
  if (gorulen.has(anahtar)) continue;
  gorulen.add(anahtar);
  tekil.push([rol, kalem, tur, erisim, pay]);
}
const birlesik = [...tekil.map((x) => [...x]), ...BIRLESME.map((x) => [...x, null])];
console.log(`\nayri uc surec:   ${KALEM.length} kalem -> ${tekil.length} benzersiz` +
  `  (dis ${tekil.filter((x) => x[3] === "dis").length}, ic ${tekil.filter((x) => x[3] === "ic").length})`);
// Tek surec tek dinleyiciyle koser: "ic" isaretli kalem de genel kapidan erisilir.
for (const k of birlesik) k[3] = "dis";
console.log(`tek surec:       ${tekil.length} + ${BIRLESME.length} dogan = ${birlesik.length} kalem` +
  `  (dis ${birlesik.length}, ic 0)`);

// Sertlestirme adimlari: her adim bir yuklem, kapattigi kalem ve getirdigi yeni kalem.
const ADIM = [
  ["gorunen bilgiyi kapat", (x) => x[2] === "gorunen bilgi", []],
  ["sunulan yolu daralt",   (x) => x[2] === "sunulan yol" && x[1] !== "varlik-kok",
    [["izin-listesi-dosyasi", "bakim yuzeyi"]]],
  ["yonetim ucunu dis kapidan al", (x) => x[2] === "yonetim ucu",
    [["ayri-yonetim-dinleyicisi", "dinlenen kapi"], ["yonetim-kimligi", "sir"]]],
  ["sifresiz kapiyi kapat", (x) => x[1] === "sifresiz-kapi", []],
];

let acik = birlesik.map((x) => [...x]);
const yeni = [];
console.log("\nadim                             kapatilan  yanlis kapatilan  yeni yuzey  kalan acik");
for (const [ad, yuklem, getirdigi] of ADIM) {
  const dusen = acik.filter(yuklem);
  acik = acik.filter((x) => yuklem(x) === false);
  const bozulan = AKIS.filter(([, k]) => dusen.some((d) => kimlik(d[0], d[1]) === k));
  yeni.push(...getirdigi);
  console.log(ad.padEnd(32) + String(dusen.length).padStart(9) +
    String(bozulan.length).padStart(18) + String(getirdigi.length).padStart(12) +
    String(acik.length + yeni.length).padStart(12) +
    (bozulan.length ? `   ${bozulan.map((b) => b[0]).join(", ")}` : ""));
}
console.log(`\nkapatilamayan kalem (${acik.length}): ${acik.map((x) => x[1]).join(", ")}`);
console.log(`kapatmanin getirdigi (${yeni.length}): ${yeni.map((x) => x[0]).join(", ")}`);
```

```
rol         kalem  dinlenen  sunulan  gorunen  yonetim   dis   ic
statik          6         1        4        1        0     6    0
vekil           6         3        0        2        1     4    2
dagitim         6         1        0        3        2     4    2
toplam         18         5        4        6        3    14    4

ayri uc surec:   18 kalem -> 14 benzersiz  (dis 10, ic 4)
tek surec:       14 + 3 dogan = 17 kalem  (dis 17, ic 0)

adim                             kapatilan  yanlis kapatilan  yeni yuzey  kalan acik
gorunen bilgiyi kapat                   4                 1           0          13   oturum-yapiskanligi
sunulan yolu daralt                     4                 0           1          10
yonetim ucunu dis kapidan al            4                 2           2           8   nobetci-saglik-cagrisi, dagitim-akisi
sifresiz kapiyi kapat                   1                 1           0           7   el-terminali-okuma

kapatilamayan kalem (4): varlik-kok, sifreli-kapi, yukari-akis-kapisi, tek-surec-kimligi
kapatmanin getirdigi (3): izin-listesi-dosyasi, ayri-yonetim-dinleyicisi, yonetim-kimligi
```

Sayım belirlenimlidir: liste sabittir, rastgelelik yoktur, süre ölçülmez.

## Rolün Kendi Yüzeyi

İlk tablo üç rolü yan yana koyuyor. Üçünün de kalem sayısı altı, ama kalemlerin **türü** farklı.

Statik sunumun altı kaleminin dördü **sunulan yol**dur ve tek bir ayara bağlıdır: kök dizin.
Kök dizinde ne varsa sunulur. Varlık kökü meşrudur — saha ekiplerinin tarayıcısı oradan
beslenir. Dizin listesi, kurulumla gelen örnek sayfa ve kökün içine bir gün bırakılmış
yapılandırma yedeği ise kimsenin karar vermediği şeylerdir. Statik rolün bütün altı kalemi
**dıştan erişilebilir**: bu rolün iç yüzeyi yoktur, çünkü kendine ait bir yönetim ucu yoktur.

Ters vekilin altı kaleminin üçü **dinlenen kapı**dır ve burada bir ayrıntı önemlidir: üçüncü
kapı yukarı akışın kendi kapısıdır. Vekil kurulurken arkadaki uygulama bir kapıda dinlemeye
başlar ve o kapı çoğu kurulumda makinenin bütün arayüzlerine bağlanır. Vekil bir kapı açmaz;
vekilin varlığı **arkasında ikinci bir kapı** açar ve o kapıya vekile uğramadan da gidilebilir.
Vekilin bütün ayarları, arkadaki kapıya doğrudan gelen bir isteği hiç görmez.

Yük dağıtımının altı kaleminin üçü **görünen bilgi**dir ve üçü de havuzun iç yapısını dışarıya
taşır: yanıt başlığındaki üye adresi, oturum çerezindeki üye kimliği, sağlık ucunun döktüğü üye
listesi. Bu rol iç yapıyı görünür kılmak için kurulur — hangi üyenin cevap verdiğini bilmek
sorun ararken gereklidir — ve aynı görünürlük dışarıya da açıktır.

Üç rolün toplamı on sekiz kalem: beş dinlenen kapı, dört sunulan yol, altı görünen bilgi, üç
yönetim ucu. On dördü dış, dördü iç.

Dağılımdaki asimetri bir şey söylüyor. Statik rolde yüzey **dosya sisteminde** duruyor: kalemi
kapatmak bir dizinin içeriğine karar vermektir. Vekil rolünde yüzey **ağ topolojisinde**
duruyor: kalemi kapatmak bir kapının hangi arayüze bağlandığına karar vermektir. Dağıtım
rolünde yüzey **yanıtın kendisinde** duruyor: kalemi kapatmak bir başlığı ya da çerezi
çıkarmaktır. Üç rol için tek bir sertleştirme yordamı yazılamamasının nedeni budur; sayı eşit
olsa da kapatma işi üç ayrı yerde yapılır.

## Birleştirmenin Yaptığı

İkinci ölçüm üç rolü **tek sürece** koyuyor. Bu, bir makinede en sık görülen düzendir: aynı
süreç hem statik dosyayı sunar, hem isteği arkaya iletir, hem üyeler arasında böler.

Birleştirme önce bir **azalma** üretir. Üç rolün de dinlediği şifresiz kapı tek kapıya iner, üç
rolün de bastığı sürüm başlığı tek başlığa iner. On sekiz kalem on dört benzersiz kaleme düşer.
Kalem sayısına bakan biri burada durup birleştirmenin yüzeyi **daralttığını** söyleyebilir.

İki şey bu okumayı bozar.

Birincisi, birleştirme kendi kalemlerini **doğurur**. Statik kök artık vekilin genel kapısından
da erişilebilir; ayrı süreçlerde bu iki yol arasında bir sınır vardı, tek süreçte yoktur. Üç
rolün yönetim uçları tek dinleyicide toplanır. Tek süreç üç rolün izinlerini birden taşır: aynı
kimlik hem statik kökü okur, hem yukarı akışa bağlanır, hem havuz üyeliğini değiştirir. Üç yeni
kalem, on dördü on yediye çıkarır.

İkincisi ve daha ağırı, **erişim damgası düşer**. Ayrı üç süreçte on dört kalemin onu dıştan
erişilebilirdi; dördü — iki yönetim ucu, sağlık ucu ve yukarı akış kapısı — süreç sınırının
arkasındaydı. Tek süreç tek dinleyiciyle koşar ve o dinleyici genel kapıdır. On yedi kalemin
**on yedisi** dıştan erişilebilir hâle gelir.

Birleştirmenin ölçüsü budur: kalem sayısı on sekizden on yediye düşerken dıştan erişilebilir
kalem sayısı ondan on yediye çıkar. Sayım kalem üzerinden yapıldığında birleştirme iyi görünür;
erişim üzerinden yapıldığında yüzey yüzde yetmiş büyümüştür.

## Dört Adım ve Durdurduğu İş

Üçüncü tablo on yedi kalemli yüzeye dört sertleştirme adımı uyguluyor. Her adım iki sayı
üretir: kaç kalem kapandı ve **kaç meşru iş durdu**.

İlk adım görünen bilgiyi kapatıyor: sürüm başlığı, hata sayfasının izi, üye adresi başlığı ve
üye çerezi. Dört kalem kapanıyor ve bir iş duruyor — oturum yapışkanlığı. Saha ekibinin çok
adımlı okuma formu, ilk adımı hangi üye karşıladıysa sonraki adımların da o üyeye gitmesine
yaslanıyordu ve bunu üye çerezinden okuyordu. Çerez gidince form ikinci adımda başka bir üyeye
düşüyor. Bu adım "sızdırılan bilgiyi kapat" başlığıyla savunulur ve savunma eksiktir: kapattığı
dördüncü kalem bilgi sızıntısı değil, taşıma düzeneğiydi.

İkinci adım sunulan yolu daraltıyor: dizin listesi, yedek dosyalar, örnek sayfa ve birleşmenin
doğurduğu çapraz kök. Dört kalem kapanıyor, hiçbir iş durmuyor. Bedeli başka yerde: kapatma bir
izin listesi dosyasıyla yapılıyor ve o dosya artık bakılması gereken bir yer. Yeni bir varlık
dizini eklendiğinde listeye eklenmezse sunulmaz; bu, ilerideki bir arızanın kaynağıdır.

Üçüncü adım yönetim uçlarını dış kapıdan alıyor. Dört kalem kapanıyor ve **iki iş duruyor**:
nöbetçinin sağlık çağrısı ve dağıtım akışının üye ekleme çağrısı. İkisi de meşrudur ve ikisi de
o uçlardan geçiyordu. Adım tamamlanabilmesi için iki yeni kalem getiriyor: yalnız iç ağdan
erişilen ayrı bir yönetim dinleyicisi ve o dinleyiciye giren bir yönetim kimliği. İkinci kalem
bir sırdır ve sırların kendi ömrü, kendi sızıntı penceresi vardır.

Dördüncü adım şifresiz kapıyı kapatıyor. Tek kalem kapanıyor, bir iş duruyor: sahadaki eski el
terminalleri yalnız şifresiz konuşuyor. Bu, en küçük kapatma ve en görünür kırılmadır — durduğu
gün bütün saha ekibi arar.

Dört adım on üç kalem kapattı, dört meşru işi durdurdu ve üç yeni kalem getirdi. Oran on üçe
dörttür: kapatılan her üç kaleme karşılık bir iş durmuştur. Bu oran adımlar arasında hiç eşit
dağılmıyor — ikinci adım dört kalemi sıfır durdurmayla kapatırken, dördüncü adım tek kalemi bir
durdurmayla kapatıyor. Sıralamayı belirleyen budur: ucuz adım önce, pahalı adım sonra. Yüzey
kalemi sayısına bakan bir sıralama dördüncü adımı en sona koymazdı, çünkü o adım en çok
konuşulan kalemi kapatıyor ve sayı olarak en azını veriyor.

## Kapatılamayan Dördü

Dört adımın sonunda geriye dört kalem kalıyor ve dördü de kapatılamaz kalemdir.

**Varlık kökü** ve **şifreli kapı** makinenin var oluş nedenidir; kapatmak sistemi kapatmaktır.
**Yukarı akış kapısı** kapatılamaz çünkü vekilin arkaya bağlanması ondan geçer; daraltılabilir
— yalnız geri döngü arayüzüne bağlanabilir — ama açık kalır. **Tek süreç kimliği** ise ancak
birleştirmeyi geri alarak, yani üç rolü üç sürece bölerek kapanır; hiçbir yapılandırma satırı
onu kapatmaz.

Sondaki tablo yedi açık kalem gösteriyor: dört kapatılamayan ve üç yeni. Başlangıçtaki on yedi
ile karşılaştırıldığında bu bir kazançtır. Yeni yüzeyin sayılmadığı bir raporda kazanç on yedi
kalemden dört kaleme inmek diye yazılırdı; sayıldığında yediye inmektir.

## Özet

- Üç web sunucusu rolünün varsayılan kurulumu on sekiz kalem bıraktı: beş dinlenen kapı, dört
  sunulan yol, altı görünen bilgi, üç yönetim ucu; on dördü dış, dördü iç erişimli.
- Rollerin kalem sayısı eşitti, türü değildi: statik sunumun dördü sunulan yol, ters vekilin üçü
  dinlenen kapı, yük dağıtımının üçü görünen bilgiydi.
- Tek süreçte birleştirme on sekiz kalemi on dört benzersize indirdi, üç kalem doğurdu ve iç
  erişimli dört kalemi dışa taşıdı: dıştan erişilebilir kalem sayısı ondan on yediye çıktı.
- Dört sertleştirme adımı on üç kalem kapattı, dört meşru işi durdurdu ve üç yeni kalem getirdi;
  yönetim uçlarını kapatan adım tek başına iki işi durdurdu ve iki yeni kalem ekledi.
- Geriye dört kapatılamayan kalem kaldı; biri olan tek süreç kimliği hiçbir ayarla değil, yalnız
  rolleri ayrı süreçlere bölerek kapanır.

## Sonraki Adım

Bu ders yüzeyi **dışarıdan** saydı: kaç kapı dinliyor, kaç yol sunuluyor, kaç uç açık. Sayımın
tamamı isteğin sunucuya **varmasıyla** ilgiliydi. İstek vardıktan sonra ne olduğuna hiç
bakılmadı.

Ters vekil isteği alıp arkaya ilettiğinde istek olduğu gibi geçmez. Bağlantı vekilde biter ve
arkaya yeni bir bağlantı açılır; o yeni bağlantının öteki ucunda istemci değil vekil durur.
İstemcinin adresi, isteğin şifreli gelip gelmediği, istemcinin hangi adı istediği ve isteğin
özgün yolu — dördü de bağlantının kendisinde taşınıyordu ve bağlantı bitti. Sonraki ders
`node:http` ile iki katlı bir vekil zinciri kurar, gerçek istek geçirir, zincirden geçerken
kaybolan dört bilgiyi tek tek sayar, her kaybın uygulamada ürettiği yanlış kararı gösterir ve
kaybı kapatmak için eklenen başlığa **güvenmenin** açtığı yüzeyi ölçer.
