Mam kilka witryn skonfigurowanych jako VirtualHosts przy użyciu Apache, które działały dobrze przez jakiś czas. Niedawno zmieniłem nazwę hosta serwera na jedną z obsługiwanych nazw domen, a także dodałem ją do / etc / hosts wskazując na zewnętrzny adres IP serwera.
Odkąd to zrobiłem, dostęp do domeny z mojego laptopa zabiera mnie do domyślnego „działa” Apache'a! strona. Jeśli usunę 000-default z / etc / apache2 / sites-enabled /, wyświetli właściwą stronę. Próbuję uzyskać dostęp do witryny za pomocą „www”. Prefiks zabiera mnie do właściwej strony, niezależnie od tego, czy 000-default jest włączony.
W związku z tym domyślam się, że domyślna konfiguracja wyświetla domyślną stronę z powodu tego, jak skonfigurowałem nazwę hosta lub / etc / hosts (lub oba), ale nie mogę wymyślić, jak to wyłączyć pozostawiając te ustawienia bez zmian. Wszelkie sugestie mile widziane!
Edycja - Moja obecna konfiguracja VirtualHost wygląda następująco:
<VirtualHost *:80>
ServerName domain.com
ServerAlias www.domain.com
ServerAdmin [email protected]
DocumentRoot /srv/www/domain
ErrorLog /srv/www/domain/logs/error.log
CustomLog /srv/www/domain/logs/access.log combined
</VirtualHost>
Podsumowując: Mam skonfigurowanych kilka VirtualHostów i tylko to nie działa poprawnie. Mogę uzyskać dostęp do http://www.domain.com w porządku, ale http://domain.com zabiera mnie do domyślnego „Apache działa”! strona. Jeśli wyłączę domyślną konfigurację 000, wyświetli się odpowiednia strona. Zaczęło się to dopiero po ustawieniu nazwy hosta serwera na domain.com i dodaniu linii do / etc / hosts wskazującej domain.com na zewnętrzny adres IP serwera. Jeśli to możliwe, chciałbym je tak zostawić.
Edycja: Uruchomiłem, apache2ctl -S
ponieważ /usr/sbin/apache2 -S
dałem mi „apache2: zła nazwa użytkownika $ {APACHE_RUN_USER}”. Oto wynik:
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80 is a NameVirtualHost
default server domain.com (/etc/apache2/sites-enabled/000-default:1)
port 80 namevhost domain.com (/etc/apache2/sites-enabled/000-default:1)
port 80 namevhost other.com (/etc/apache2/sites-enabled/other:1)
port 80 namevhost another.com (/etc/apache2/sites-enabled/another:1)
port 80 namevhost domain.com (/etc/apache2/sites-enabled/domain:1)
Syntax OK
źródło
Odpowiedzi:
Zgubiłem to pytanie innego dnia.
Jeśli masz kontener <VirtualHost> bez komponentu ServerName, użyje on domyślnej nazwy hosta. Ponieważ 000-default prawdopodobnie nie ma komponentu ServerName i jest pierwszym alfabetycznie dołączonym, dlatego odpowiada na hostname.com i nie pozwala na działanie jawnie zadeklarowanej nazwy hosta.
źródło
ServerName example.com
w domyślnej konfiguracji działa jednak świetnie. Dzięki!Czy gdzieś masz dyrektywę NameVirtualHost *: 80?
Próbować:
To powie ci, jak Apache analizuje plik konfiguracyjny. Czy masz konfiguracje, które mają rzeczywiste adresy IP lub wszystkie mają *? Czy brakuje Ci czegoś: 80? Apache nie lubi ich mieszać.
Czy domyślnie masz ServerName domain.com lub ServerAlias domain.com?
źródło
Sprawdź ServerName i ServerAlias w VirtualHost:
Przeczytaj: http://httpd.apache.org/docs/2.2/mod/core.html#serveralias , http://httpd.apache.org/docs/2.2/vhosts/
źródło
To działało:
kiedy miałem literówkę, to NIE działało (dyrektywa ServerName dwa razy):
Gdy miałem dwukrotnie dyrektywę ServerName, nadal wyświetlała się ona na pierwszej stronie z listy (nie pokazano tutaj).
mam nadzieję, że to pomoże komuś ...
źródło
Miałem podobny problem i naprawiłem go, jawnie ustawiając nazwę serwera w głównym pliku httpd.conf, zamiast pozwalając apache'owi automatycznie stwierdzić, że tak było. Zakładam, że to, co zdecydował apache, było takie samo jak mój vhost (zdefiniowany później), więc domyślny „wygrał”, zastępując ustawienie vhost.
Właśnie ustawiłem httpd.conf ServerName na nazwę hosta, którą ma maszyna, nigdy nie będę obsługiwał stron internetowych.
źródło