Takip et

Apache’yi Ubuntu 20.04 Üzerinde mod_proxy ile Ters Vekil Sunucusu Olarak Kullanma

Apache’yi Ubuntu 20.04 Üzerinde mod_proxy ile Ters Vekil Sunucusu Olarak Kullanma Giriş Günümüzün karmaşık web uygulamaları ve mikroservis m

Apache’yi Ubuntu 20.04 Üzerinde mod_proxy ile Ters Vekil Sunucusu Olarak Kullanma

Giriş

Günümüzün karmaşık web uygulamaları ve mikroservis mimarileri, ağ trafiğini yönetmek, performansı artırmak ve güvenliği sağlamak için çeşitli araçlar gerektirir. Bu araçlardan biri de ters vekil sunucusu (reverse proxy) olarak bilinen yapıdır. Ters vekil sunucusu, istemcilerden gelen istekleri alır ve bu istekleri bir veya daha fazla arka uç (backend) sunucusuna yönlendirir, ardından arka uç sunucusundan gelen yanıtı istemciye geri iletir. Bu makalede, Apache HTTP Sunucusu’nu Ubuntu 20.04 işletim sistemi üzerinde mod_proxy modülü aracılığıyla nasıl güçlü bir ters vekil sunucusu olarak yapılandıracağımızı ayrıntılı olarak inceleyeceğiz.

Ters vekil sunucuları, modern web altyapılarında kritik bir rol oynar. Güvenlik katmanı sağlamanın yanı sıra, yük dengeleme (load balancing) yaparak trafiği birden çok sunucuya dağıtabilir, SSL/TLS sonlandırması gerçekleştirebilir, önbellekleme (caching) ile performansı artırabilir ve farklı uygulamaları tek bir alan adı altında erişilebilir kılabilirler. Apache HTTP Sunucusu, esnekliği, kararlılığı ve geniş modül desteği sayesinde bu görevler için mükemmel bir seçimdir. Özellikle mod_proxy ve onunla ilişkili alt modüller (mod_proxy_http, mod_proxy_balancer, mod_ssl vb.) Apache’yi güçlü bir ters vekil sunucusu çözümüne dönüştürür.

Bu makalede, öncelikle Apache’nin ve gerekli modüllerin kurulumunu ve temel yapılandırmasını ele alacağız. Ardından, basit bir ters vekil senaryosundan başlayarak, URL tabanlı yönlendirme, SSL/TLS sonlandırma, yük dengeleme, önbellekleme ve WebSocket desteği gibi daha gelişmiş yapılandırmaları adım adım açıklayacağız. Son olarak, güvenlik hususlarına ve yaygın sorun giderme ipuçlarına değineceğiz. Bu kılavuzun sonunda, Apache’yi kendi özel ihtiyaçlarınıza göre bir ters vekil sunucusu olarak başarıyla yapılandırabilecek bilgiye sahip olacaksınız.

Ön Koşullar

Bu kılavuzu takip edebilmek için aşağıdaki ön koşulların karşılandığından emin olun:

* Ubuntu 20.04 Sunucusu: Temiz bir Ubuntu 20.04 LTS (Focal Fossa) kurulumuna sahip bir sunucuya erişiminiz olmalı.
* Sudo Ayrıcalıkları: sudo ayrıcalıklarına sahip bir kullanıcı veya root kullanıcısı ile oturum açmış olmalısınız.
* Apache2 Kurulumu: Apache HTTP Sunucusu’nun sunucunuzda kurulu olması gerekmektedir. Eğer kurulu değilse, sonraki bölümde kurulum adımlarını bulacaksınız.
* Temel Ağ Bilgisi: IP adresleri, portlar ve alan adları gibi temel ağ kavramlarına aşina olmak faydalı olacaktır.
* Backend Sunucusu: Ters vekil sunucusunun istekleri yönlendireceği en az bir arka uç (backend) web sunucusu (örneğin, Nginx, Node.js uygulaması, başka bir Apache sunucusu vb.) hazır olmalıdır. Bu sunucunun IP adresi ve port numarası gerekecektir.

Apache ve Gerekli Modüllerin Kurulumu

Eğer Apache sunucunuz kurulu değilse veya gerekli modüller etkinleştirilmemişse, aşağıdaki adımları izleyerek kurulumu gerçekleştirebilirsiniz.

Sistem Güncellemesi

İlk olarak, sunucunuzdaki paket listelerini güncelleyin ve mevcut paketleri yükseltin:

sudo apt update
sudo apt upgrade -y

Apache2 Kurulumu

Eğer Apache henüz kurulu değilse, aşağıdaki komutla kurun:

sudo apt install apache2 -y

Kurulum tamamlandıktan sonra Apache servisinin çalıştığından emin olun ve sistem başlangıcında otomatik başlaması için etkinleştirin:

sudo systemctl start apache2
sudo systemctl enable apache2
sudo systemctl status apache2

sudo systemctl status apache2 komutu çıktısında active (running) ifadesini görmelisiniz.

Gerekli Modüllerin Etkinleştirilmesi

Apache’yi ters vekil sunucusu olarak kullanmak için mod_proxy ve onunla ilişkili çeşitli modüllere ihtiyacımız var. Temel bir ters vekil yapılandırması için mod_proxy ve mod_proxy_http gereklidir. Gelişmiş senaryolar için ek modüller gerekecektir:

* mod_proxy: Ana vekil sunucu modülü.
* mod_proxy_http: HTTP/HTTPS isteklerini vekil olarak iletmek için gereklidir.
* mod_proxy_balancer: Yük dengeleme özellikleri için.
* mod_lbmethod_byrequests: Yük dengeleme algoritmalarından biri (istek sayısına göre). Diğerleri de mevcuttur.
* mod_ssl: SSL/TLS sonlandırması için.
* mod_headers: HTTP başlıklarını değiştirmek veya eklemek için.
* mod_proxy_wstunnel: WebSocket bağlantılarını vekil olarak iletmek için.
* mod_cache, mod_cache_disk: Önbellekleme için.

Şimdi bu modülleri etkinleştirelim. En azından temel ters vekil için gerekli olanları etkinleştirmekle başlayabiliriz:

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod headers # Genellikle faydalıdır

Eğer SSL/TLS sonlandırması veya yük dengeleme gibi gelişmiş özellikler kullanacaksanız, ilgili modülleri de etkinleştirmeniz gerekir:

sudo a2enmod ssl
sudo a2enmod proxy_balancer
sudo a2enmod lbmethod_byrequests # Yük dengeleme için bir yöntem
sudo a2enmod proxy_wstunnel # WebSocket için
sudo a2enmod cache
sudo a2enmod cache_disk

Her modülü etkinleştirdikten sonra veya tüm gerekli modülleri etkinleştirdikten sonra Apache servisini yeniden başlatmanız gerekir:

sudo systemctl restart apache2

Modüllerin Kontrolü

Etkinleştirilen modülleri kontrol etmek için aşağıdaki komutu kullanabilirsiniz:

apache2ctl -M | grep proxy
apache2ctl -M | grep ssl
apache2ctl -M | grep cache

Bu komutlar, etkinleştirilen modüllerin listesini gösterecektir.

Ters Vekil Sunucu Temelleri

Apache’yi ters vekil sunucusu olarak yapılandırmadan önce, bazı temel kavramları anlamak önemlidir.

mod_proxy Nedir?

mod_proxy, Apache HTTP Sunucusu’nun temel vekil sunucu modülüdür. İstemcilerden gelen istekleri alır ve bunları başka bir sunucuya (arka uç sunucusu) iletir. Ardından, arka uç sunucusundan gelen yanıtı yakalar ve istemciye geri gönderir. Bu, Apache’nin bir “aracı” görevi görmesini sağlar.

Temel Yapılandırma Adımları

Bir ters vekil yapılandırması genellikle bir sanal ana bilgisayar (Virtual Host) dosyası içinde yapılır. Bu dosyalar /etc/apache2/sites-available/ dizininde bulunur.

1. Sanal Ana Bilgisayar Dosyası Oluşturma: Her bir ters vekil yapılandırması için ayrı bir sanal ana bilgisayar dosyası oluşturmak en iyi uygulamadır. Örneğin, ters-vekil.conf.
2. ProxyRequests Off: Bu direktif kritik öneme sahiptir. ProxyRequests On olarak ayarlandığında, Apache bir ileri vekil sunucusu (forward proxy) gibi davranır; yani, istemcilerin internet üzerindeki herhangi bir sunucuya erişmesine izin verir. Bu, güvenlik açıkları yaratabilir. Ters vekil sunucusu olarak çalışırken, Apache’nin yalnızca yapılandırılmış arka uç sunucularına istekleri yönlendirmesi gerekir. Bu nedenle, ProxyRequests Off olarak ayarlanmalıdır.
3. ProxyPass Direktifi: Bu direktif, belirli bir URL yolunu veya tüm istekleri bir arka uç sunucusuna yönlendirmek için kullanılır.
* Sözdizimi: ProxyPass [URL_Yolu] [Arka_Uç_URL]
* Örnek: ProxyPass / http://backend_sunucu_ip:port/
4. ProxyPassReverse Direktifi: Bu direktif, arka uç sunucusundan gelen HTTP yanıt başlıklarındaki (özellikle Location, Content-Location ve URI başlıkları) yönlendirme URL’lerini otomatik olarak yeniden yazar. Bu, istemcinin arka uç sunucusunun dahili URL’leri yerine ters vekil sunucusunun URL’lerini görmesini sağlar ve yönlendirmelerin doğru çalışmasını garanti eder.

Basit Bir Ters Vekil Yapılandırması

Şimdi, Apache’yi basit bir ters vekil sunucusu olarak yapılandırmak için adım adım bir örnek oluşturalım. Bu senaryoda, Apache’nin 80 numaralı portundan gelen tüm istekleri, 192.168.1.100 IP adresindeki 8080 numaralı portta çalışan bir arka uç sunucusuna yönlendireceğiz.

Senaryo

* Ön Uç (Ters Vekil): Apache HTTP Sunucusu (Bu sunucu)
* Arka Uç: http://192.168.1.100:8080 adresindeki herhangi bir web uygulaması veya sunucusu.
* Alan Adı: example.com (veya sunucunuzun IP adresi).

Yapılandırma Adımları

1. Yeni Bir Sanal Ana Bilgisayar Dosyası Oluşturma:
Yeni bir yapılandırma dosyası oluşturalım:

sudo nano /etc/apache2/sites-available/example.com.conf

2. Yapılandırma İçeriğini Ekleme:
Dosyanın içine aşağıdaki içeriği yapıştırın. ServerName ve ServerAdmin değerlerini kendi alan adınız ve e-posta adresinizle değiştirmeyi unutmayın. Ayrıca ProxyPass ve ProxyPassReverse direktiflerindeki arka uç sunucu adresini kendi arka uç sunucunuzun IP adresi ve portu ile değiştirin.


        ServerAdmin webmaster@example.com
        ServerName example.com
        # Eğer alan adınız yoksa veya test ediyorsanız ServerName yerine ServerAlias kullanabilirsiniz
        # ServerAlias www.example.com

        # Bu, Apache'nin bir ileri vekil sunucusu olarak çalışmasını engeller.
        # Ters vekil sunucusu için kritik bir ayardır.
        ProxyRequests Off

        # İstemci HTTP başlıklarını Proxy'ye aktar
        ProxyPreserveHost On

        # Hata günlükleri ve erişim günlükleri
        ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
        CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined

        # Tüm istekleri belirtilen arka uç sunucusuna yönlendir
        ProxyPass / http://192.168.1.100:8080/
        # Arka uçtan gelen yönlendirmeleri ters vekil sunucusunun alan adına göre yeniden yaz
        ProxyPassReverse / http://192.168.1.100:8080/

        # Güvenlik için erişim kontrolü
        
            Require all granted
            # Eğer belirli IP'lerden erişime izin vermek isterseniz:
            # Require ip 192.168.1.0/24
            # Require ip 127.0.0.1
        
    

3. Yapılandırmayı Etkinleştirme:
Yeni sanal ana bilgisayar dosyasını etkinleştirin ve varsayılan Apache karşılama sayfasını devre dışı bırakın (çakışmaları önlemek için):

sudo a2ensite example.com.conf
    sudo a2dissite 000-default.conf # Eğer gerekliyse

4. Yapılandırma Sözdizimini Kontrol Etme:
Apache yapılandırmasında herhangi bir hata olup olmadığını kontrol edin:

sudo apachectl configtest

Syntax OK çıktısını görmelisiniz. Herhangi bir hata varsa, nano düzenleyiciye dönüp düzeltin.

5. Apache’yi Yeniden Başlatma:
Değişikliklerin etkili olması için Apache servisini yeniden başlatın:

sudo systemctl restart apache2

6. Test Etme:
Şimdi tarayıcınızdan http://example.com (veya sunucunuzun IP adresi) adresine gidin. Arka uç sunucunuzda çalışan uygulamanın veya web sayfasının içeriğini görmelisiniz. Bu, Apache’nin başarıyla bir ters vekil sunucusu olarak çalıştığını gösterir.

Gelişmiş Ters Vekil Yapılandırmaları

Basit bir yapılandırmanın ötesine geçerek, Apache’nin mod_proxy ile sunabileceği daha gelişmiş özellikleri keşfedelim.

URL Tabanlı Yönlendirme

Farklı URL yollarını farklı arka uç sunucularına yönlendirmek, mikroservis mimarileri veya aynı alan adı altında birden çok uygulamayı barındırmak için kullanışlıdır.

Senaryo:
* http://example.com/app1 istekleri http://backend1.local:8080 adresine gitsin.
* http://example.com/app2 istekleri http://backend2.local:8081 adresine gitsin.
* Diğer tüm istekler http://default-backend.local:8082 adresine gitsin.

Yapılandırma:
Önceki example.com.conf dosyasını düzenleyelim:


    ServerAdmin webmaster@example.com
    ServerName example.com

    ProxyRequests Off
    ProxyPreserveHost On

    ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
    CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined

    # /app1 ile başlayan istekleri backend1'e yönlendir
    ProxyPass /app1/ http://backend1.local:8080/
    ProxyPassReverse /app1/ http://backend1.local:8080/

    # /app2 ile başlayan istekleri backend2'ye yönlendir
    ProxyPass /app2/ http://backend2.local:8081/
    ProxyPassReverse /app2/ http://backend2.local:8081/

    # Diğer tüm istekleri varsayılan backend'e yönlendir
    ProxyPass / http://default-backend.local:8082/
    ProxyPassReverse / http://default-backend.local:8082/

    
        Require all granted
    

Önemli Not: ProxyPass direktifleri sıraya göre işlenir. Daha spesifik yollar (örneğin /app1/) daha genel yollardan (örneğin /) önce gelmelidir.

SSL/TLS Sonlandırma

Ters vekil sunucularının en yaygın kullanımlarından biri, SSL/TLS sonlandırması yapmaktır. Bu, istemcilerle şifreli bağlantıyı Apache’nin kurduğu, ancak arka uç sunucularıyla şifresiz (HTTP) veya ayrı bir şifreli (HTTPS) bağlantı kurduğu anlamına gelir. Bu, arka uç sunucularının SSL sertifikası yönetimi yükünü azaltır ve performansı artırabilir.

Ön Koşul: mod_ssl etkinleştirilmiş olmalı (sudo a2enmod ssl). Ayrıca geçerli bir SSL sertifikanız (Let’s Encrypt gibi) ve özel anahtarınız olmalıdır.

Yapılandırma:
example.com.conf dosyasını HTTPS için düzenleyelim ve yeni bir sanal ana bilgisayar bloğu ekleyelim:

# HTTP'den HTTPS'ye yönlendirme (isteğe bağlı ama önerilir)

    ServerName example.com
    Redirect permanent / https://example.com/



    ServerAdmin webmaster@example.com
    ServerName example.com

    # SSL/TLS ayarları
    SSLEngine On
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    # Diğer SSL/TLS güvenlik ayarları buraya eklenebilir (ciphers, protocols vb.)

    ProxyRequests Off
    ProxyPreserveHost On

    ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
    CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined

    # Backend'e HTTP ile yönlendirme (en yaygın senaryo)
    ProxyPass / http://192.168.1.100:8080/
    ProxyPassReverse / http://192.168.1.100:8080/

    # Veya Backend'e HTTPS ile yönlendirme (eğer backend de HTTPS kullanıyorsa)
    # Bu durumda SSLProxyEngine On da gereklidir.
    # SSLProxyEngine On
    # ProxyPass / https://192.168.1.100:8443/
    # ProxyPassReverse / https://192.168.1.100:8443/

    
        Require all granted
    

Yapılandırmayı etkinleştirdikten ve Apache’yi yeniden başlattıktan sonra, https://example.com adresine erişiminiz şifreli olacak ve istekler arka uca yönlendirilecektir.

Yük Dengeleme (Load Balancing)

Trafiği birden çok arka uç sunucusu arasında dağıtmak, uygulamanızın ölçeklenebilirliğini ve kullanılabilirliğini artırır. Apache mod_proxy_balancer modülü ile yük dengeleme yapabilir.

Ön Koşul: mod_proxy_balancer ve en az bir yük dengeleme yöntemi modülü (örneğin mod_lbmethod_byrequests) etkinleştirilmiş olmalı.

Senaryo: İki farklı arka uç sunucusu (backend1.local:8080 ve backend2.local:8081) arasında yük dengeleme yapmak.

Yapılandırma:
example.com.conf dosyasını düzenleyelim:


    ServerAdmin webmaster@example.com
    ServerName example.com

    ProxyRequests Off
    ProxyPreserveHost On

    ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
    CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined

    # Balancer kümesini tanımla
    
        # Üye sunucular
        BalancerMember http://backend1.local:8080/ route=1
        BalancerMember http://backend2.local:8081/ route=2

        # Yük dengeleme algoritması (örneğin, byrequests - varsayılan)
        ProxySet lbmethod=byrequests

        # Diğer seçenekler:
        # ProxySet stickysession=JSESSIONID|jsessionid # Oturum yapışkanlığı için
        # ProxySet nofailover=On # Başarısız sunucuya geçişi engeller
    

    # Tüm istekleri balancer kümesine yönlendir
    ProxyPass / balancer://mycluster/
    ProxyPassReverse / balancer://mycluster/

    
        Require all granted
    

Yük Dengeleme Algoritmaları:
* byrequests (Varsayılan): İstek sayısına göre dengeler.
* bytraffic: Trafik miktarına (bayt) göre dengeler.
* bybusyness: Sunucunun mevcut bağlantı sayısına göre dengeler. Daha az meşgul olan sunucuya yönlendirir.
* wrr (Weighted Round Robin): Ağırlıklı döngüsel. BalancerMember direktifine loadfactor=X ekleyerek ağırlık belirleyebilirsiniz.

Oturum Yapışkanlığı (Sticky Sessions):
Bazı uygulamalar, belirli bir istemcinin her zaman aynı arka uç sunucusuna yönlendirilmesini gerektirir (örneğin, oturum durumunu korumak için). ProxySet stickysession direktifi ile bu sağlanabilir. Yukarıdaki örnekte JSESSIONID veya jsessionid gibi bir çerez adı belirterek bu çerezi taşıyan istekleri aynı sunucuya yönlendirebilirsiniz.

Önbellekleme (Caching)

Apache, mod_cache ve mod_cache_disk (veya mod_cache_socache) modülleri ile ters vekil olarak önbellekleme yapabilir. Bu, arka uç sunucusuna yapılan tekrar eden isteklerin sayısını azaltarak performansı önemli ölçüde artırır.

Ön Koşul: mod_cache ve mod_cache_disk etkinleştirilmiş olmalı.

Yapılandırma:
example.com.conf dosyasını düzenleyelim:


    ServerAdmin webmaster@example.com
    ServerName example.com

    ProxyRequests Off
    ProxyPreserveHost On

    ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
    CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined

    # Önbellek dizinini ve ayarlarını tanımla
    
        CacheRoot /var/cache/apache2/proxy
        CacheDirLevels 2
        CacheEnable disk /
        CacheMaxExpire 3600 # Önbellekteki öğelerin maksimum ömrü (saniye)
        CacheDefaultExpire 600 # Varsayılan ömür
        CacheMinFileSize 1024 # Önbelleğe alınacak minimum dosya boyutu (bayt)
        CacheMaxFileSize 10485760 # Önbelleğe alınacak maksimum dosya boyutu (bayt)
    

    ProxyPass / http://192.168.1.100:8080/
    ProxyPassReverse / http://192.168.1.100:8080/

    
        Require all granted
    

Önbellek Dizinini Oluşturma:
CacheRoot olarak belirtilen dizinin mevcut olduğundan ve Apache kullanıcısının (genellikle www-data) yazma izinlerine sahip olduğundan emin olun:

sudo mkdir -p /var/cache/apache2/proxy
sudo chown -R www-data:www-data /var/cache/apache2/proxy

Apache’yi yeniden başlattıktan sonra, istekler önbelleğe alınmaya başlayacaktır. Önbellekleme, arka uç sunucusunun Cache-Control ve Expires başlıklarını dikkate alır.

WebSocket Desteği

Modern web uygulamaları, gerçek zamanlı iletişim için sıkça WebSocket kullanır. Apache mod_proxy_wstunnel modülü, WebSocket bağlantılarını ters vekil olarak iletmenizi sağlar.

Ön Koşul: mod_proxy_wstunnel etkinleştirilmiş olmalı.

Senaryo: http://example.com/ws adresine gelen WebSocket bağlantılarını ws://backend.local:8080/websocket adresine yönlendirmek.

Yapılandırma:
example.com.conf dosyasını düzenleyelim:


    ServerAdmin webmaster@example.com
    ServerName example.com

    ProxyRequests Off
    ProxyPreserveHost On

    ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
    CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined

    # HTTP isteklerini yönlendir
    ProxyPass / http://192.168.1.100:8080/
    ProxyPassReverse / http://192.168.1.100:8080/

    # WebSocket isteklerini yönlendir
    # /ws ile başlayan istekleri ws:// protokolü ile backend'e yönlendir
    ProxyPassMatch "^/(.*)/ws$" "ws://192.168.1.100:8080/websocket/$1"
    # Eğer ProxyPassMatch yerine basit bir ProxyPass kullanmak isterseniz:
    # ProxyPass /ws/ ws://192.168.1.100:8080/websocket/
    # ProxyPassReverse /ws/ ws://192.168.1.100:8080/websocket/

    
        Require all granted
    

ProxyPassMatch direktifi, düzenli ifadeler kullanarak daha esnek yönlendirmeler sağlar. Burada, URL’nin bir kısmını backend yoluna aktarmak için yakalama grupları kullanılmıştır.

Güvenlik Hususları

Ters vekil sunucusu, web altyapınızın ön cephesi olduğu için güvenlik kritik öneme sahiptir.

* ProxyRequests Off: Bu direktifin her zaman Off olarak ayarlandığından emin olun. Aksi takdirde, sunucunuz bir açık vekil sunucusu (open proxy) haline gelebilir ve spam gönderimi veya diğer kötü niyetli faaliyetler için kullanılabilir.
* Erişim Kontrolü: veya blokları içinde Require all denied, Require ip gibi direktifler kullanarak ters vekil sunucunuza veya belirli arka uç yollarına kimlerin erişebileceğini kısıtlayın. Örneğin, yönetim panelleri için yalnızca belirli IP adreslerinden erişime izin verin.
* SSL/TLS Kullanımı: Her zaman HTTPS kullanın. Güçlü şifreleme algoritmaları ve TLS 1.2 veya 1.3 gibi modern protokoller kullanın. Eski ve zayıf şifrelemeleri devre dışı bırakın.
* HTTP Başlıklarının Yönetimi (mod_headers):
* X-Forwarded-For, X-Forwarded-Proto, X-Forwarded-Host gibi başlıkları arka uca iletin. Bu, arka uç uygulamalarının istemcinin gerçek IP adresini, protokolünü ve alan adını bilmesini sağlar. ProxyPreserveHost On bu başlıkları otomatik olarak ayarlar.
* Hassas bilgileri ifşa edebilecek sunucu başlıklarını (Server, X-Powered-By) kaldırın veya değiştirin.
* Güvenlik başlıkları ekleyin (örneğin, Strict-Transport-Security, Content-Security-Policy, X-Content-Type-Options, X-Frame-Options).
* Arka Uç Sunucularına Doğrudan Erişimi Engelleme: Güvenlik duvarınızda (UFW veya başka bir firewall) arka uç sunucularınızın portlarına yalnızca ters vekil sunucusunun IP adresinden erişime izin verin. Doğrudan internetten erişimi engelleyin.
* Web Uygulama Güvenlik Duvarı (WAF): ModSecurity gibi bir WAF entegre ederek yaygın web saldırılarına (SQL enjeksiyonu, XSS vb.) karşı ek bir koruma katmanı sağlayabilirsiniz.
* Günlük Kaydı ve İzleme: Erişim ve hata günlüklerini düzenli olarak izleyin. Anormal trafik veya hata desenleri güvenlik sorunlarına işaret edebilir.

Sorun Giderme ve İpuçları

Ters vekil yapılandırmalarında sorunlarla karşılaşmak yaygındır. İşte bazı sorun giderme ipuçları:

* Apache Hata Günlükleri: En önemli kaynak /var/log/apache2/error.log dosyasıdır. Herhangi bir yapılandırma hatası, modül yükleme sorunu veya vekil yönlendirme problemi burada detaylı olarak kaydedilir.
* Erişim Günlükleri: /var/log/apache2/access.log dosyası, istemci isteklerinin ve Apache’nin bunlara nasıl yanıt verdiğinin bir kaydını tutar. İsteklerin arka uca ulaşıp ulaşmadığını kontrol etmek için faydalıdır.
* Yapılandırma Sözdizimi Kontrolü: Herhangi bir değişiklik yaptıktan sonra sudo apachectl configtest komutunu çalıştırmayı unutmayın. Bu, Apache’yi yeniden başlatmadan önce sözdizimi hatalarını yakalar.
* LogLevel debug: Daha ayrıntılı günlük kaydı için, sanal ana bilgisayarınızın veya genel Apache yapılandırmanızın içine LogLevel debug ekleyebilirsiniz. Bu, mod_proxy‘nin ne yaptığını anlamak için çok faydalı olabilir, ancak üretim ortamında bu seviyeyi kapatmayı unutmayın çünkü çok fazla günlük üretir.
* Firewall (UFW): Sunucunuzun güvenlik duvarının (UFW) Apache için gelen 80 (HTTP) ve 443 (HTTPS) portlarına izin verdiğinden emin olun. Ayrıca, ters vekil sunucusunun arka uç sunucularının portlarına erişmesine izin verildiğinden emin olun.

sudo ufw allow 'Apache Full'
    sudo ufw allow out to 192.168.1.100 port 8080 # Arka uç portu için örnek
    sudo ufw enable

* Arka Uç Sunucusu Durumu: Arka uç sunucunuzun çalıştığından ve doğru portu dinlediğinden emin olun. Arka uç sunucunuzun günlüklerini kontrol edin.
* SELinux/AppArmor: Eğer sunucunuzda SELinux veya AppArmor gibi güvenlik mekanizmaları etkinse, Apache’nin önbellek dizinine yazma veya ağ bağlantıları kurma izinleri engelleniyor olabilir. Bu durumda ilgili politikalara izin eklemeniz gerekebilir.
* Tarayıcı Önbelleği: Test yaparken tarayıcı önbelleğinizin temiz olduğundan veya gizli sekme (incognito mode) kullandığınızdan emin olun. Tarayıcılar eski içeriği önbellekten servis edebilir.
* curl Komutu: Komut satırından curl -v http://example.com veya curl -v https://example.com kullanarak HTTP başlıklarını ve yönlendirmeleri detaylı bir şekilde inceleyebilirsiniz. Bu, özellikle ProxyPassReverse‘in doğru çalışıp çalışmadığını kontrol etmek için faydalıdır.

Sonuç

Bu makalede, Apache HTTP Sunucusu’nu Ubuntu 20.04 üzerinde mod_proxy modülü aracılığıyla güçlü ve esnek bir ters vekil sunucusu olarak nasıl yapılandıracağımızı detaylı bir şekilde inceledik. Temel kurulumdan başlayarak, URL tabanlı yönlendirme, SSL/TLS sonlandırma, yük dengeleme, önbellekleme ve WebSocket desteği gibi gelişmiş yapılandırmaları adım adım öğrendik. Ayrıca, ters vekil sunucusu kullanırken dikkat edilmesi gereken önemli güvenlik hususlarına ve yaygın sorun giderme ipuçlarına da değindik.

Apache’nin mod_proxy modülü, modern web altyapılarının karmaşık gereksinimlerini karşılamak için geniş bir yetenek yelpazesi sunar. Güvenliği artırma, performansı optimize etme ve uygulamalarınızın ölçeklenebilirliğini sağlama konusunda kritik bir rol oynar. Bu kılavuzdaki bilgilerle, kendi özel ihtiyaçlarınıza göre Apache’yi bir ters vekil sunucusu olarak güvenle yapılandırabilecek ve yönetebileceksiniz. Web sunucusu mimarinizi daha sağlam, verimli ve güvenli hale getirmek için Apache’nin bu güçlü özelliğinden tam olarak yararlanmanızı öneririz. Gelecekte, daha fazla özellik ve modülü keşfederek Apache ters vekil sunucunuzun yeteneklerini genişletebilirsiniz.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

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

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Exit mobile version