Apache2'de varsayılan VirtualHost nasıl devre dışı bırakılır?


10

Tasarım gereği apache2'de, bilinmeyen bir Host sahibi olan herhangi bir http isteği ilk yüklenen VirtualHost'a yönlendirilecektir. Bu özelliği devre dışı bırakmanın bir yolu var mı? Farklı dedi, ben kullanıcı sadece açıkça adlandırılan VirtualHost tanımları alabilirsiniz bir web sunucusu istiyorum. Bir ServerName veya ServerAlias ​​satırında açıkça belirtilmeyen diğer ana bilgisayar adlarının sessizce yoksayılması gerekir.

Mümkün mü?

Listen 80
NameVirtualHost *

<VirtualHost _default_:*>
# Anything matching this host should be silently ignored.
</VirtualHost>

<VirtualHost *>
DocumentRoot /www/example1
ServerName www.example.com
</VirtualHost>

<VirtualHost *>
DocumentRoot /www/example2
ServerName www.example.org
</VirtualHost>

Güncelleme: Aşağıda ve başka yerlerde önerildiği gibi, bir isteği sessizce göz ardı etmek iyi bir fikir olmayabilir ve HTTP için RFC'leri bozabilir. Ancak, sanal ana bilgisayarlar birden çok ayrı fiziksel HTTP sunucusuna sahip olacak şekilde taklit edildiğinden, sessiz yoksayma yaklaşımı benim için mantıksız görünmüyor. Bazı IP'leri IP tabanlı sanal barındırma ve güvenlik duvarı ile aynı olurdu (belki de tüm istemciler için değil).

Yanıtlar:


4

"Sessizce başarısız olmanın" iyi bir fikir olduğundan emin değilim. Sen müşteriye en azından vermelidir bazı olanların göstergesi. Belki bir http 410 "gitti" hatası gönderebilirsiniz. Böyle bir şey hile yapmalıdır:

RewriteRule ^.*$ - [G]

Ayrıca, sadece boş bir html sayfası olabilecek özel bir 410 hata belgesi belirtebilirsiniz.


Bu çözümü kendi başıma da keşfettim. Mod_rewrite ve "RewriteEngine On" yüklemek için gerekli olmayabileceklerini belirten satırlar eklemelisiniz. Onlar benim içindi. :)
Harvey

2
Ayrıca, sadece Gitti ya da Yasak dediğimiz ve daha da önemlisi, "-" oyuncu değişikliğini önlediğinden, normal ifade çok daha basit olabilir:RewriteRule . - [F]
Harvey

17

Yeniden yazma kurallarını içermeyen alternatif bir yol:

<VirtualHost _default_:*>
    <Location />
        Deny from all
        Options None
        ErrorDocument 403 Forbidden.
    </Location>
</VirtualHost>

2
Bu kabul edilen çözüm olmalıdır. +1
Greg Schmit

Bu çözüm üzerinde net değilim. Birkaç VHOST dosyam var ve sadece bununla yeni bir tane mi oluşturuyorum? Bunu denedim ve 001.default.conf dosyasını adlandırdım, ancak hala alt etki alanlarımı yeniden yönlendiriyorum.
Frantumn

@Frantumn Soruda belirtildiği gibi, "bilinmeyen bir Host sahibi olan herhangi bir http isteği ilk yüklenen VirtualHost'a yönlendirilecektir ". Bu <VirtualHost>nedenle "varsayılan" ilk olarak sunucu yapılandırmasında tanımlanmalıdır . Tam olarak hangi dosyanın olması gerektiği yapılandırmanıza bağlıdır. (Ancak, "yeniden yönlendirilen alt
alanlar

Huh. Sunucumu işaret eden diğer etki alanlarını kullanırken,
403'ü yapmaz

1

bu benim için çalıştı

<VirtualHost x.x.x.x:80 [x:x::x:x:x:x]:80>
  ServerName myactualservername.com
  ServerAlias *
  <Location />
    Deny from all
    Options None
    ErrorDocument 403 Forbidden.
  </Location>
</VirtualHost>

xxxx'i gerçek ipv4 ve ipv6 ile
değiştirin myactualservername.com'u makine tarafından sunulan gerçek bir web sitesi ile değiştirin

İsme dayalı sanal konak kullanıyorum.
Bu çözüm için kredi https://serverfault.com/a/82309/459796 adresine gidiyor

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.