Domyślna obsługa niedopasowanych domen / subdomen w Apache

12

Mam konfigurację Apache2 z wieloma VirtualHostami. Mój DNS jest ustawiony na akceptację *.<domain>.<tld>w wielu domenach. Wszystko działa poprawnie, ale jeśli przejdę do something-random-here.example.com, wydaje mi się, że wybrano nieprawidłowy VirtualHost (domyślam się, że pierwszy lub ostatni znajdzie). Czy istnieje sposób, aby powiedzieć Apache, aby używał pewnych reguł, jeśli żaden z wpisów VirtualHost nie pasuje do domeny lub subdomeny? Wolałbym zwrócić 404.

Ryall
źródło

Odpowiedzi:

12

Apache używa pierwszego wirtualnego hosta, jeśli żadna nazwa nie pasuje. Wystarczy skonfigurować nowego wirtualnego hosta jako pierwszy z losową nazwą, wyświetlającą wszystko, co chcesz - lub zwracającą stronę 404.

Moritz Zarówno
źródło
Dzięki, ale czy mógłbyś rozwinąć tę kwestię? Nie mogę tego uruchomić.
Ryall,
2
Jak wyglądają twoje pliki konfiguracyjne apache2? Lub jakiego systemu operacyjnego używasz? Apache czyta konfigurację w określonej kolejności, a pierwszy VirtualHost, który widzi, jest domyślny. Odbiera cały ruch z nieznanych nazw hostów. Więc jeśli masz jeden plik konfiguracyjny, to pierwszy VirtualHost. Jeśli masz wiele takich, jak w większości linuksów, może to być ten o nazwie 0default lub tak ...
Moritz Zarówno
Umieściłem kilka domyślnych konfiguracji w ports.conf. Nie działało, ponieważ próbowałem dopasować *: 80, gdy używałem <ip>: 80 na moich wirtualnych hostach. Zamiast tego musiałem utworzyć osobny domyślny wpis dla każdego adresu IP i teraz działa.
Ryall,
Nie jest używany ani mój pierwszy, ani ostatni plik v-hosta. Myślę, że Apache się zmienił.
Cobolt
4

Symbole wieloznaczne obejmują pliki konfiguracji witryny:

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

Uporządkuj pliki konf. Witryny, aby były ładowane w oczekiwanej kolejności. Przykład...

01-httpd.conf

02-site1-httpd.conf

03-site2-httpd.conf

itp...

Apache odczyta je w kolejności. Następnie utwórz taki, który zawsze ładuje się jako ostatni, aby złapać niedopasowane hosty wirtualne i zwrócić 404 zamiast ładowania domyślnej witryny.

99-catchall-httpd.conf

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

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

Porty należy zastąpić portami, na których nasłuchuje httpd. Lub jeśli masz httpd nasłuchujący na określonych interfejsach, musisz zamiast tego dodać catchall dla każdego interfejsu, na przykład:

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

Mam nadzieję że to pomoże. Korzystam z tej metody, aby ładować witryny w określonej przeze mnie kolejności i zapobiegać niezamierzonemu ładowaniu nieoczekiwanych hostów wirtualnych.

Jason Słobotski
źródło
czy „ServerAlias ​​*” nie powinien zostać usunięty z reguł catch-all?
Ahm3d powiedział
Myślę, że to nie będzie miało znaczenia. Jeśli żaden z wirtualnych hostów przed catchall nie obsłuży żądania, zwrócą one odpowiedź 404. Nie widzę powodu, dla którego ServerAlias ​​* musiałby zostać usunięty, ale mogą być niepotrzebnie specyficzne.
Jason Słobotski
0

Jak Moritz Bothwspomniano, Apache2 użyje pierwszego wirtualnego hosta, który znajdzie, jeśli nie jest zgodny z żądanym.

Kiedy po raz pierwszy instalujesz Apache2, istnieje domyślna konfiguracja strony internetowej, której możesz użyć jako szablonu, zmodyfikować lub usunąć, a ja zawsze zastanawiałem się, do czego właściwie służy 000-default.conf, ponieważ oni też mieli default.conf. Po przeczytaniu tego Moritz Both, co powiedziano, wszystko ma teraz większy sens.

To, co zrobiłem dla mojego serwera, to skopiowanie konfiguracji domyślnej nazwy hosta (witryny) do pliku 000-default.conf i a2ensite 000-default.

Teraz, za każdym razem, gdy do mojej witryny pojawia się niedopasowane żądanie domeny, wyświetla stronę domyślną 000, która jest tylko kopią mojej domyślnej strony domyślnej.

Deweloper Newteq
źródło
1
Robię to samo, ale mój niepasujący / domyślny host wysyła przekierowanie do właściwej witryny najwyższego poziomu, która również zmienia wyświetlany adres URL na prawidłowy.
ivanivan
To naprawdę świetny pomysł! Nie myślałem o tym. Na pewno będę tak wdrażać moją stronę :)
Newteq Developer
Z jakiegoś powodu nie mogę przekierować mojego ssl (strona domyślna). Mam, <VirtualHost *:443> ... Redirect / https://baseurl/ ... </VirtualHost> ale adres URL pozostaje taki sam. Zrobiłem to samo dla wersji non-ssl i przekierowuje poprawnie. Jakieś pomysły?
Newteq Developer,