Apache nie przestrzega dyrektywy ServerName dla konkretnej witryny

9

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 -Sponieważ /usr/sbin/apache2 -Sdał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
John Debs
źródło
czy domena.com jest używana w głównym pliku httpd.conf jako nazwa_serwera? lub apache2ctl.conf wydaje się, że używasz ubuntu, więc nazwa może się różnić.
Prix

Odpowiedzi:

12

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.

karmawhore
źródło
Rozumiem, jak to naprawić? Chcę, aby domyślna konfiguracja obsługiwała nieobsługiwane domeny, ale nie chcę, aby obsługiwała tę konkretną domenę.
John Debs
nadaj mu domenę inną niż ta, która jest używana w konfiguracji lub zmień nazwę na zzz-default, aby nazywała się ostatnią.
karmawhore
Okej, myślę, że teraz to wszystko rozumiem. Próbowałem zzz-default, ale nie takie zachowanie chciałem. Ustawienie ServerName example.comw domyślnej konfiguracji działa jednak świetnie. Dzięki!
John Debs,
4

Czy gdzieś masz dyrektywę NameVirtualHost *: 80?

Próbować:

/usr/sbin/apache2 -S

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?

karmawhore
źródło
Tak, mam go w moim /etc/apache2/posts.conf. Dodam streszczenie do pytania, które, mam nadzieję, uczyni je bardziej zrozumiałym.
John Debs
Moja domyślna konfiguracja 000 jest nietknięta, nie ma ona żadnych nazw ServerName ani ServerAlias.
John Debs
NameVirtualHost jest przestarzały.
Sam
0

To działało:

<VirtualHost *:80>
    DocumentRoot /var/www/www.mydomain.com
    ServerName mydomain.com
    ServerAlias www.mydomain.com
</VirtualHost>

kiedy miałem literówkę, to NIE działało (dyrektywa ServerName dwa razy):

<VirtualHost *:80>
    DocumentRoot /var/www/www.mydomain.com
    ServerName mydomain.com
    ServerName www.mydomain.com
</VirtualHost>

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

Sam
źródło
0

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.

sstteevvee
źródło