• Web (HTTP) Servis Yönetimi | LKD #1

    Web (HTTP) Servis Yönetimi | LKD #1

    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.
    ÖzellikGETPOST
    Veri YeriURL’deBody’de
    GüvenlikDaha az (loglar, tarayıcı geçmişi)Daha iyi (body’de gizli)
    Uzunluk SınırıVarYok (pratikte sunucuya bağlı sınırlanabilir)
    Geçmişte saklanırEvetHayır
    Kullanım amacıVeri ÇekmeVeri 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.

    1. Ziyaret: Kullanıcı siteye gelir.
    2. Kimlik Tanımlama: Sunucu, bu kullanıcı için benzersiz bir Session ID üretir.
    3. Depolama: Bu ID, kullanıcının tarayıcısına bir Cookie (Çerez) olarak gönderilir
    4. 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.

    bash
    user@linux:~$ sudo apt update && sudo apt upgrade -y

    İkinci aşama da Apache Web sunucusunun kurulumunu yapıyoruz.

    bash
    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.

    bash
    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,

    bash
    user@linux:~$ sudo systemctl start apache2

    ve

    bash
    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:

    bash
    user@linux:~$ss -tulnp

    şeklinde çıktı almamız muhtemeldir.

    Eğer kurduğumuz servisin dosyalarını toplu bir şekilde görmek istersek,

    bash
    user@linux:~$ dpkg -L apache2

    komutunu girmemiz yeterlidir.

    Rocky Linux

    Burada Apache web servisinin paket adı httpd. Bunu kuruyoruz.

    bash — rocky linux httpd
    [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,

    bash
    [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,

    bash
    [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,

    bash
    [user@rocky ~]# rpm -ql httpd

    komutunu girip

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

    Devamını okumak için…