Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi
Apache VirtualHost, aynı Apache sunucusunun birden fazla alan adını veya IP/port kombinasyonunu farklı site yapılandırmalarıyla sunmasını sağlar. İstemci bir alan adına bağlandığında Apache, isteğin geldiği IP ve porta bakar; HTTP isteğindeki Host değerini uygun <VirtualHost> bloğuyla eşleştirir. Eşleşme yoksa o IP ve port için varsayılan, genellikle yapılandırma dosyalarında ilk görünen VirtualHost kullanılır.

VirtualHost nasıl eşleşir?​


VirtualHost, hangi adres/port grubuna gelen isteğe nasıl davranılacağını tanımlar. Bağlantıyı kabul edecek adres/port ayrıca Listen ile açılmış olmalıdır; VirtualHost yazmak dinleyici oluşturmaz. Aşağıdaki örnek, 80 portunun zaten dinlendiği ve gerekli modüllerin yüklü olduğu bir Apache kurulumunda herkese açık statik bir deneme sitesi içindir:

Kod:
<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public

    <Directory "/var/www/example.com/public">
        Require all granted
    </Directory>
</VirtualHost>

Buradaki *:80, 80 portundaki joker adres eşleşmesini ifade eder; yalnız IPv4 anlamına gelmez. Gerçekte hangi IPv4/IPv6 adreslerinden bağlantı kabul edildiğini Listen ayarı ve platform belirler. ServerName ana alan adıdır; ServerAlias ise aynı siteye yönlenecek ek adları tanımlar. DocumentRoot, istenen dosyanın aranacağı kök dizindir. Örneğin http://example.com/index.html isteği, bu ayara göre /var/www/example.com/public/index.html dosyasını arar.

HTTPS için ayrı bir VirtualHost kullanılır; çünkü port farklıdır ve TLS ayarları da bu blokta yer alır:

Kod:
<VirtualHost *:443>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public

    SSLEngine on
    SSLCertificateFile /etc/ssl/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/ssl/example.com/privkey.pem
</VirtualHost>

HTTPS’te sertifika seçimi HTTP isteğinden önceki TLS el sıkışmasında gerçekleşir. İstemcinin SNI adı uygun TLS VirtualHost’un seçilmesine yardım eder; SNI yoksa varsayılan blok devreye girebilir. Sertifika yolları gerçekten mevcut değilse HTTPS bloğu yüklenemez. Bu nedenle HTTPS ayarını kopyalamak tek başına yeterli değildir; sertifika ve SSL modülü de sunucuda hazır olmalıdır.

İstek hangi siteye gider?​


Apache önce bağlantının ulaştığı IP ve port için uygun VirtualHost grubunu seçer. Aynı grupta birden fazla blok varsa HTTP isteğindeki Host başlığını ServerName ve ServerAlias değerleriyle karşılaştırır. Alan adı eşleşirse ilgili blok seçilir. Hiçbir ad eşleşmezse grubun varsayılan bloğu devreye girer.

Aşağıdaki örnekte iki alan adı aynı sunucuyu paylaşır, fakat farklı dizinlerden içerik sunar:

Kod:
<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/example.com/public
</VirtualHost>

<VirtualHost *:80>
    ServerName example.net
    DocumentRoot /var/www/example.net/public
</VirtualHost>

İstemci example.net için istek gönderdiğinde ikinci blok seçilir. Bunlar aynı eşleştirme grubunu gösteren kısa örnek bloklardır; gerçek sitede dizin erişim yetkileri de tanımlanmalıdır. Alan adını normal biçimde ziyaret ederken DNS’nin doğru sunucuya çözülmesi gerekir. Yerel Host testi ise bu DNS adımını atlayabilir.

Karar verirken temel farkları şu şekilde değerlendirebilirsiniz:

AyarGöreviYanlışsa görülebilecek sonuç
IP ve portİsteğin hangi VirtualHost grubuna gireceğini belirlerVarsayılan site veya bağlantı hatası
ServerNameAna alan adını eşleştirirAlan adı başka siteye düşebilir
ServerAliasEk alan adlarını aynı siteye bağlarwww veya alternatif ad eşleşmez
DocumentRootDosyaların aranacağı dizini belirler404 veya yanlış içerik

Uygulama ve doğrulama​


Apache kullanan Linux sistemlerde dosya yolu ve etkinleştirme komutları dağıtıma göre değişebilir. Panel yönetimli sunucuda panelin desteklediği site/ek yönerge yolunu kullanın; oluşturulmuş dosyanın üzerine yazmayın. Değişecek yapılandırmanın geri dönüş kopyasını alın. Debian/Ubuntu tarzı kurulumlarda uygulanabilir temel akış şöyledir:

  1. Site dizinini ve test dosyasını oluşturun: /var/www/example.com/public/index.html. Dosyada ayırt edici bir metin, örneğin example.com VirtualHost, bulunsun.
  2. VirtualHost bloğunu Apache’nin site yapılandırma dizinine bir dosya olarak kaydedin. ServerName ve DocumentRoot değerlerini gerçek alan adınız ve dizininizle değiştirin.
  3. Dağıtımınızın yöntemine göre siteyi etkinleştirin. Doğru yapılandırmayı okuyan yetkiyle apachectl -S çalıştırıp adres/port grubunu ve dosya sırasını görün; ardından apachectl configtest ile sözdizimini denetleyin. Beklenen sonuç Syntax OK ve başarılı çıkış kodudur.
  4. Test başarılıysa Apache’yi yeniden yükleyin. Dağıtımınızın servis yöneticisindeki reload işlemini kullanın; restart gereksiz kesinti oluşturabilir.
  5. Yerel HTTP alan adı eşleşmesini denetleyin: curl -i -H "Host: example.com" http://127.0.0.1/. Apache 127.0.0.1:80 üzerinde de dinliyorsa beklenen sonuç test dosyanızın içeriğidir. Bu komut DNS’yi veya HTTPS sertifikasını sınamaz. Sonra alan adını normal yoldan açıp DNS, içerik ve günlükleri kontrol edin.

Syntax OK alınmıyorsa yazım hatasını, bulunamayan dosyayı, okuma yetkisi sorununu veya eksik modülü hata ayrıntısına göre ayırın; hata çıktısındaki dosya ve satır numarasını düzeltmeden yeniden yükleme yapmayın. Sözdizimi doğru olduğu halde yanlış site görünüyorsa önce DNS’yi, kullandığınız portu, Host değerini ve aynı IP:port grubunda ilk sırada bulunan varsayılan VirtualHost’u kontrol edin. Alan adı henüz DNS’e bağlı değilse yerel testte curl -H yaklaşımı, doğru VirtualHost eşleşmesini DNS’ten bağımsız sınamak için kullanılabilir.

Sık yapılan hatalar​


En yaygın hata, yalnızca ServerName yazıp DocumentRoot veya gerekli erişim izinlerini tanımlamamaktır. Bir diğer hata, www adını ServerAlias içine eklememektir. Ayrıca HTTP için *:80 tanımlanmışken HTTPS isteği için aynı bloğun kullanılacağını varsaymak yanlıştır; 443 portu ve TLS ayarları ayrı değerlendirilir. Aynı alan adını birden fazla etkin blokta tanımlamak da beklenmeyen eşleşmelere yol açar; tek bir ana VirtualHost belirleyip yönlendirme veya uygulama davranışını orada açıkça tanımlayın.

Sık sorulan sorular​


ServerAlias yazmak DNS kaydı veya yönlendirme oluşturur mu?​

Hayır. Yönerge, bu sunucuya ulaşmış bir isteğin hangi siteyle eşleşeceğini belirler. Alan adının DNS kaydı ayrı yönetilir. www adresini www olmayan adrese taşımak istiyorsanız ayrıca açık bir HTTP yönlendirmesi gerekir.

ServerAlias eklemek HTTPS sertifikası hatasını çözer mi?​

Tek başına çözmez. İstemcinin istediği adın sertifika tarafından da kapsanması ve doğru TLS VirtualHost’un seçilmesi gerekir. HTTP Host başlığını değiştirerek yaptığınız düz HTTP testinin başarılı olması, HTTPS/SNI akışının da doğru olduğunu kanıtlamaz.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic