Apache'de eşleşmeyen alanlar / alt alanlar için varsayılan işleme


12

Birden fazla VirtualHosts ile bir Apache2 yapılandırması var. DNS'im *.<domain>.<tld>birden çok alanda kabul edecek şekilde ayarlanmış . Her şey doğru çalışıyor ama eğer gidersem something-random-here.example.comgeçersiz bir VirtualHost seçiliyor gibi görünüyor (bulduğu ilk veya sonuncuyu tahmin ediyorum). VirtualHost girişlerinden hiçbiri etki alanı veya alt etki alanı ile eşleşmiyorsa Apache'ye belirli kuralları kullanmasını söylemenin bir yolu var mı? Tercihen 404'ü iade etmek istiyorum.

Yanıtlar:


12

Hiçbir ad eşleşmezse Apache ilk sanal ana bilgisayarı kullanır. Sadece yeni bir sanal ana bilgisayarı rastgele bir ada sahip ilk olarak yapılandırın, istediğinizi görüntüleyin - ya da 404 sayfası döndürün.


Teşekkürler ama lütfen biraz ayrıntı verebilir misiniz? Bunu iţletemiyorum.
Ryall

2
Apache2 yapılandırma dosyalarınız nasıl düzenlenir? Veya hangi işletim sistemini kullanıyorsunuz? Apache, yapılandırmayı belirli bir sırada okur ve gördüğü ilk VirtualHost varsayılan ayardır. Bilinmeyen ana bilgisayar adlarından tüm trafiği alır. Tek bir yapılandırma dosyanız varsa, ilk VirtualHost dosyasıdır. Çoğu linuxes gibi birden fazla olanlar varsa, 0default ya da öylesine denilen biri olabilir ...
Moritz Her ikisi de

Bazı varsayılan yapılandırmalar ports.conf. Çalışmıyor çünkü sanal ana bilgisayarlarımda <ip>: 80 kullanırken *: 80 ile eşleşmeye çalıştım. Bunun yerine her IP için ayrı bir varsayılan giriş oluşturmak zorunda kaldım ve şimdi çalışıyor.
Ryall

İlk veya son v-host dosyam kullanılmıyor. Bence apache değişti.
Cobolt

4

Joker karakter, site yapılandırma dosyalarınızı içerir:

Include path/to/site/confs/*httpd.conf

Sitenizin conf dosyalarını, beklenen sırada yüklenecek şekilde düzenleyin. Misal...

01-httpd.conf

02-alan 1-Httpd.conf

03-site2-httpd.conf

vb...

Apache bunları sırayla okuyacaktır. Ardından, benzersiz sanal ana bilgisayarları yakalamak için her zaman en son yüklenecek bir tane oluşturun ve varsayılan bir site yüklemek yerine 404 döndürün.

99-tümünü yakalama-Httpd.conf

<VirtualHost *:8080>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

<VirtualHost *:8443>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

Bağlantı noktalarını httpd'nizin dinlediği bağlantı noktaları ile değiştirdiğinizden emin olun. Veya belirli arabirimleri dinleyen httpd'niz varsa, bunun yerine her arabirim için bir catchall eklemeniz gerekir:

<VirtualHost 192.168.1.101:8080>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>
<VirtualHost 192.168.1.101:8443>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

<VirtualHost 192.168.1.102:8080>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

<VirtualHost 192.168.1.102:8443>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

Bu yardımcı olur umarım. Siteleri belirttiğim sırada yüklemek ve eşleşmeyen sanal ana bilgisayarların beklenmedik bir siteyi istemeden yüklemelerini önlemek için bu yöntemi kullanıyorum.


"ServerAlias ​​*" tümünü yakalama kurallarından kaldırılmıyor mu?
Ahm3d Said

Herhalde önemli değil. Catchall öncesinde sanal ana bilgisayarların hiçbiri isteği işlemezse, bunlar 404 yanıtı döndürür. ServerAlias ​​* kaldırılması gereken bir neden görmüyorum, ancak gereksiz yere özel olabilir.
Jason Slobotski

0

Belirtildiği gibi Moritz Both, Apache2, istediğiniz herhangi biriyle eşleşmediği takdirde bulduğu ilk sanal ana bilgisayarı kullanacaktır.

Apache2'yi ilk yüklediğinizde, şablon olarak kullanabileceğiniz, değiştirebileceğiniz veya silebileceğiniz varsayılan bir web sitesi conf vardır ve her zaman 000-default.conf'un gerçekte ne olduğunu merak ediyordum, çünkü bir default.conf da vardı. Moritz BothSöylediklerini okuduktan sonra , şimdi her şey daha anlamlı.

Sunucum için yaptığım varsayılan ana bilgisayar adı (web sitesi) için yapılandırmayı 000-default.conf dosyasına kopyalamaktı a2ensite 000-default.

Şimdi, web siteme benzersiz bir alan adı isteği olduğunda, varsayılan varsayılan sayfamın bir kopyası olan 000 varsayılan sayfayı sunar.


1
Aynı şeyi yapıyorum, ancak eşleşmeyen / varsayılan ana bilgisayarım, görüntülenen URL'yi de doğru olana değiştiren uygun üst düzey siteye bir yönlendirme gönderir.
ivanivan

Bu gerçekten harika bir fikir! Bunu düşünmedim. Sitemi kesinlikle bu şekilde uygulayacağım :)
Newteq Developer

Nedense, benim ssl (varsayılan sayfa) yönlendirmek almak gibi olamaz. Ben var <VirtualHost *:443> ... Redirect / https://baseurl/ ... </VirtualHost> ama url aynı kalır. Aynı olmayan ssl sürümü için yaptım ve doğru yönlendirir. Herhangi bir fikir?
Newteq Developer
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.