4-8 Şubat 2026 tarihleri arasında Linux Kullanıcıları Derneği tarafından düzenlenen Mustafa Akgül Özgür Yazılım Kış Kampı’nda Web (HTTP) Servis Yönetimi’nde Doruk Fişek ve Gökhan Çuryan hocalarımdan aldığım ders notlarımdır.
İstemci – Sunucu Mimarisi
Web dünyası temelde istemci – sunucu arasındaki karşılıklı taleplere dayanır.

1. İstemci (Client) Katmanı
İstemci, sunucudan hizmet talep eden taraftır.
Örnekler: Chrome, Mozilla Firefox, Brave tarayıcıları veya komut satırı aracı olan curl.
Çalışan Teknolojiler: HTML, CSS, JavaScript (React, Svelte gibi kütüphaneler bu katmanda yer alır).
2. Sunucu (Server) Katmanı
Sunucu, hizmet sunan ve gelen isteklere geri dönüt (response) veren taraftır. Örneğin; Nginx, Apache…
Örnekler: Nginx, Apache.
Görev: Gelen talebi doğrudan yanıtlar veya ek bir uygulama sunucusu aracılığıyla çalıştırır.
Protokol: İstemci ve sunucu arasındaki iletişimi sağlayan kurallar bütünüdür. Web servislerinin temel dili HTTP protokolüdür.
3. Uygulama Sunucusu Katmanı
İş mantığının yürüdüğü ve sunucuda çalışan teknolojilerin barındığı katmandır.
Çalışan Teknolojiler: Java, PHP, Node.js, Python (Django).
Java için Tomcat, Python için WSGI (Gunicorn/Uvicorn) protokolü kullanılan yapılara ek olarak; PHP tarafında PHP-FPM, Ruby için Puma örnek olarak verilebilir.
4. Servis Katmanı
Servisler, uygulamanın temel fonksiyonlarını yerine getirmesini sağlarlar. Örnek olarak DNS, DHCP, veritabanları (MsSQL, PostgreSQL, MySQL…) verilebilir.

Katmanlar Arası İletişim ve Veri Transferi
Unix Socket
Aynı sunucu üzerindeki iki farklı sürecin (örneğin Nginx ile bir Python uygulaması) haberleşmesi için kullanılan bir IPC (Inter-Process Communication) metodudur. Hızından ötürü öncelikli tercih edilse de, tüm uygulamalar bunu kullanmak zorunda değildir. Mesela JAVA uygulamaları genellikle Unix Socket yöntemini tercih etmez.
HTTP Request Metotları (GET vs. POST)
İki web sayfası arasındaki değişkenleri aktarmak istesek iki farklı yöntem ile bunu yapabiliriz.
- GET: Değişkenler URL yapısına (Örn:
.../gonder.html?i=8&j=8) eklenir. Tekrar bakılmak istenen isteklerde (bookmark, geçmiş) tercih edilir ancak bir uzunluk sınırı vardır. HTTPS kullanımında URL’deki ana adres açıkta giderken, parametreler şifrelenir.
Not: Alan adının şifrelenmeden gönderilmesinin nedeni; sunucu, aynı IP üzerindeki birden fazla site arasından hangisinin SSL sertifikasını kullanacağını seçebilmektir. Bundan ötürü de alan adı “plaintext” (açıkça) gönderilir.
- POST: Veriler GET metodundan farklı olarak bir “body” (gövde) bölümüyle gönderilir. Uzunluk sınırı yoktur ve tarayıcı geçmişinde saklanmasını istemediğimiz (şifre, form verisi vb.) durumlarda tercih edilir.
| Özellik | GET | POST |
| Veri Yeri | URL’de | Body’de |
| Güvenlik | Daha az (loglar, tarayıcı geçmişi) | Daha iyi (body’de gizli) |
| Uzunluk Sınırı | Var | Yok (pratikte sunucuya bağlı sınırlanabilir) |
| Geçmişte saklanır | Evet | Hayır |
| Kullanım amacı | Veri Çekme | Veri Gönderme / İşlem gerçekleştirme |

Session ve Cookie İlişkisi
Session, sunucuda tutulan kullanıcı verisidir; Cookie ise bu veriye ulaşmamızı sağlayan istemci tarafındaki bilgilerdir. Amacımız, kullanıcının kimliğini sayfalar arası geçişlerde ve sonraki ziyaretlerde korumaktır.
- Ziyaret: Kullanıcı siteye gelir.
- Kimlik Tanımlama: Sunucu, bu kullanıcı için benzersiz bir
Session IDüretir. - Depolama: Bu ID, kullanıcının tarayıcısına bir Cookie (Çerez) olarak gönderilir
- Hatırlama: Kullanıcı sayfayı her değiştirdiğinde, tarayıcı bu Cookie’yi sunucuya geri gönderir. Sunucu da “Tamam, bu o kullanıcı” diyerek kişiyi tanır.
Kurulum Aşaması
Kurulumları iki farklı sanal makine üzerinden yürüteceğiz. İlki Debian, diğeri ise RedHat tabanlı Rocky Linux.
Sanal makineleri oluştururken daima İngilizce kurulum yapmamız gerekmekte. Türkçe’de eğitimde de üstünde durduğumuz “Turkish I-İ dotting problem” gibi problemler sebebiyle kurulumları İngilizce yapmamız büyük önem teşkil ediyor.
Her iki dağıtımı da grafik arayüzü olmadan minimal paketlerle kurmamız gerekli. İki sanal makinede de Apache Web sunucusunu kaldıracağız.
Debian
İlk aşama da makinedeki paketleri güncellememiz gerekli. Aksi taktirde kurulum aşamasında farklı hatalar alabiliriz.
user@linux:~$ sudo apt update && sudo apt upgrade -y
İkinci aşama da Apache Web sunucusunun kurulumunu yapıyoruz.
user@linux:~$ sudo apt install apache2 -y
Kurduğumuz servisin durumunu aşağıdaki komutlarla kontrol edebilmekteyiz.
“Status” ile servisin çalışıp çalışmadığını kontrol ediyoruz.
user@linux:~$ sudo systemctl status apache2
Karşımıza çıkacak muhtemelen satırlar şöyle olacaktır:

Bunun dışında servisin çalışmadığını veya “enable” modda olmadığını görürsek sırasıyla,
user@linux:~$ sudo systemctl start apache2
ve
user@linux:~$ sudo systemctl enable apache2
komutlarını girerek apache servisinin başlamasını ve sistemi yeniden başlattığımızda otomatik olarak onun da yeniden başlamasını sağlıyoruz.
Servisin çalıştığını doğrulamak adına Host (ana bilgisayar) üzerinden kurduğumuz sunucumuza curl ile istek atabiliriz veya hali hazırda açık portları şu şekilde listeleyebiliriz:
user@linux:~$ss -tulnp

şeklinde çıktı almamız muhtemeldir.
Eğer kurduğumuz servisin dosyalarını toplu bir şekilde görmek istersek,
user@linux:~$ dpkg -L apache2
komutunu girmemiz yeterlidir.
Rocky Linux
Burada Apache web servisinin paket adı httpd. Bunu kuruyoruz.
[user@rocky ~]# sudo dnf install httpd -y
Not: Debian’dan farklı olarak kurulumu yaptıktan sonra httpd servisi otomatik olarak başlamıyor ve enable modda olmuyor. Bunun için servisi manuel olarak enable moda almamız gerekiyor.
Bir diğer yapmamız gereken işlem diğer bilgisayarlardan erişimi sağlamak adına firewall’a kural eklemektir. Bunun için,
[user@rocky ~]# sudo firewall-cmd --list-all
yazdığımız kodun çıktısında firewall’ın engellediği protokolleri görebiliriz. Hemen kendi uygulamamıza diğer makinelerden erişim sağlamak için,
[user@rocky ~]# sudo firewall-cmd --add-service=http
komutunu girer ve “Success” çıktısını alıp başarılı bir şekilde tamamlarız.
Kurulan dosyaların listesine erişmek için,
[user@rocky ~]# rpm -ql httpd
komutunu girip

çıktısını alıyoruz.

