Jeśli mam 3 domeny: domain1.com, domain2.com i domain3.com, czy można skonfigurować domyślnego wirtualnego hosta dla domen, których nie ma na liście? Na przykład, gdybym miał:
<VirtualHost 192.168.1.2 204.255.176.199>
DocumentRoot /www/docs/domain1
ServerName domain1
ServerAlias host
</VirtualHost>
<VirtualHost 192.168.1.2 204.255.176.199>
DocumentRoot /www/docs/domain2
ServerName domain2
ServerAlias host
</VirtualHost>
<VirtualHost 192.168.1.2 204.255.176.199>
DocumentRoot /www/docs/everythingelse
ServerName *
ServerAlias host
</VirtualHost>
Jeśli zarejestrujesz domenę i skierujesz ją na mój serwer, domyślnie będzie to wszystko pokazywać to samo co domena3. Czy to jest możliwe?
apache-2.2
virtualhost
SJaguar13
źródło
źródło
Podczas korzystania z hostów wirtualnych opartych na nazwach, pierwsza załadowana konfiguracja hosta wirtualnego będzie domyślna (Źródło: Apache Wiki ). Na przykład przy konfiguracji poniżej, w przeciwnym razie niedopasowane domeny będą pasować do
domain-one.com
:Wiele serwerów nie ma monolitycznego pliku konfiguracyjnego, ale kilka plików konfiguracyjnych specyficznych dla hosta jest zorganizowanych w następujący sposób:
W takim przypadku, aby najpierw załadować konkretną konfigurację hosta wirtualnego, zmień nazwę dowiązania symbolicznego na coś, co będzie pierwsze podczas sortowania, np
00-default
.Niektóre inne odpowiedzi nie są całkiem poprawne. Według Wiki Apache, ustawienie
ServerName
wirtualnego hosta jest nieprawidłowe. Jeśli host bez aServerName
nie zostanie załadowany jako pierwszy, Apache może go nigdy nie użyć, ponieważ domyślnie załadowany byłby pierwszy host.Co więcej, chociaż
ServerAlias *
rzeczywiście pasuje do wszystkiego, może również zastąpić inne hosty wirtualne zdefiniowane później. Być może to podejście zadziałałoby, gdyby zawsze był to ostatni wirtualny host, który ma zostać zdefiniowany (jak w konfiguracji podanej w pytaniu), ale oznacza to dodanie nowej dyrektywy i zmianę kolejności sortowania zamiast zmiany kolejności jak wyżej.źródło
httpd-vhosts.conf
Nie podawaj nazwy serwera, a to stanie się Twoim domyślnym vhostem.
Upewnij się także, że nie określono DocumentRoot w głównym pliku httpd.conf, ponieważ będzie to miało pierwszeństwo przed vhostami.
źródło
Kolejność jest ważna - przenieś swoją definicję vhosta do wszystkiego innego na początek listy.
źródło
Użyj wirtualnego hosta _default_ i umieść go najpierw w httpd-vhosts.conf, jak określono w http://httpd.apache.org/docs/2.2/vhosts/examples.html
„Łapanie każdego żądania na dowolny nieokreślony adres IP i port, tj. Kombinację adresu / portu, który nie jest używany dla żadnego innego wirtualnego hosta [...] Domyślny vhost nigdy nie obsługuje żądania wysłanego na adres / port, który jest używane dla vhostów opartych na nazwach. Jeśli żądanie zawierało nieznany nagłówek Host: lub nie było go, jest zawsze obsługiwane z podstawowego hosta opartego na nazwie (vhost dla tego adresu / portu pojawia się jako pierwszy w pliku konfiguracyjnym). "
Fragment z działającego, ale zaciemnionego httpd-vhosts.conf, który blokuje wszystkie vhosty do portu 80:
Szczegółowe wyjaśnienie procesu dopasowywania vhosta można znaleźć tutaj: http://httpd.apache.org/docs/2.2/vhosts/details.html
źródło
_default_
jest używany tylko w przypadku niepasujących adresów IP , więc jeśli masz vhost (*: 80) ze znakiem wieloznacznym, nigdy nie będzie używany.Symbole wieloznaczne obejmują pliki konfiguracji witryny:
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
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 dodać catchall dla każdego interfejsu, w ten sposób:
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.
źródło
Najlepszym rozwiązaniem jest zmiana nazwy pliku konfiguracyjnego witryny zaczynającego się od „1”, aby załadował się pierwszy i będzie to domyślna witryna.
Apache2 ustawia pierwszy załadowany plik vhost jako stronę domyślną.
źródło
000-default
z tego powodu domyślna instalacja apache ma również hosta wirtualnego.podczas używania
<VirtualHost *:port>
i określania ServerName / ServerAlias dla hostów, na których ci zależy, to właśnie musiałem zrobić.Trochę tła w mojej sytuacji:
Mam dynamiczny adres IP od mojego usługodawcy internetowego, więc mój adres IP jest zarejestrowany w firmie rejestrującej dynamiczny adres IP (w moim przypadku noip.org). Jeden z moich „hostów” musiał zostać zarejestrowany podczas mojej rejestracji DNS jako myabc.example.com jako CNAME, co wskazuje na host1.ddns.net. Ale host2.ddns.net został bez zmian. Chciałem, aby myabc.example.com i host1.ddns.net poszły na stronę 1 i host2.ddns.net, aby przejść na stronę 2 i wszystko inne, w tym mój adres IP, aby przejść do wartości domyślnej.
Pierwszy plik conf odczytu będzie domyślnym, czyli
000_def.conf
,001_site1.conf
,002_site2.conf
zostanie odczytany w tej kolejności ze000_def.conf
jako domyślnej witryny. (uwaga: w moim przypadku mam te „pliki”, w/etc/apache2/sites-enabled
których faktycznie znajdują się dynamiczne linki do właściwego pliku conf/etc/apache2/sites-available
)Ponieważ nazwa_serwera jest używana w 001_site1.conf i 002_site2.conf, należy również ustawić na coś w 000_def.conf.
źródło