Apache respektiert die ServerName-Direktive für eine bestimmte Site nicht

9

Ich habe einige Sites, die mit Apache als VirtualHosts konfiguriert wurden und seit einiger Zeit einwandfrei funktionieren. Ich habe kürzlich den Hostnamen des Servers in einen der Domänennamen geändert, die bereitgestellt wurden, und ihn auch zu / etc / hosts hinzugefügt, die auf die externe IP-Adresse des Servers verweisen.

Seitdem habe ich durch den Zugriff auf die Domain von meinem Laptop aus Apaches Standard "Es funktioniert!" Seite. Wenn ich 000-default aus / etc / apache2 / sites-enabled / entferne, wird die richtige Site angezeigt. Der Versuch, mit dem 'www' auf die Site zuzugreifen. Das Präfix führt mich zur richtigen Site, unabhängig davon, ob 000-default in Sites aktiviert ist oder nicht.

Aufgrund all dessen schätze ich, dass die Standardkonfiguration die Standardseite bereitstellt, da ich den Hostnamen oder / etc / hosts (oder beides) konfiguriert habe, aber ich kann nicht herausfinden, wie ich das währenddessen deaktivieren kann Belassen Sie diese Einstellungen unverändert. Anregungen willkommen!

Bearbeiten - Meine aktuelle VirtualHost-Konfiguration sieht folgendermaßen aus:

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

Zusammenfassend: Ich habe mehrere VirtualHosts eingerichtet, und dies ist die einzige, die nicht richtig funktioniert. Ich kann problemlos auf http://www.domain.com zugreifen , aber http://domain.com bringt mich zu Apaches Standard "Es funktioniert!" Seite. Wenn ich die 000-Standardkonfiguration deaktiviere, wird die richtige Seite angezeigt. Dies begann erst, nachdem ich den Hostnamen des Servers auf domain.com festgelegt und eine Zeile zu / etc / hosts hinzugefügt hatte, die domain.com auf die externe IP-Adresse des Servers verweist. Ich würde diese gerne so lassen, wenn es möglich ist.

Bearbeiten: Ich lief apache2ctl -Sseitdem /usr/sbin/apache2 -Sgab mir "apache2: falscher Benutzername $ {APACHE_RUN_USER}". Hier ist die Ausgabe:

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
quelle
Wird domain.com in der Hauptdatei httpd.conf als Servername verwendet? oder apache2ctl.conf Sie scheinen Ubuntu zu verwenden, daher kann der Name abweichen.
Prix

Antworten:

12

Ich habe diese Frage neulich verloren.

Wenn Sie einen <VirtualHost> -Container ohne ServerName-Komponente haben, wird der Standardhostname verwendet. Da 000-default wahrscheinlich keine ServerName-Komponente hat und als erstes alphabetisch aufgenommen wird, antwortet es auf hostname.com und lässt nicht zu, dass Ihr explizit deklarierter Hostname funktioniert.

Karmawhore
quelle
Ich verstehe, wie kann ich das beheben? Ich möchte, dass die Standardkonfiguration nicht behandelte Domänen behandelt, aber ich möchte nicht, dass sie diese bestimmte Domäne behandelt.
John Debs
Geben Sie ihm eine andere Domäne als die, die in einer Konfiguration verwendet wird, oder benennen Sie sie in zzz-default um, damit sie zuletzt aufgerufen wird.
Karmawhore
Okay, ich glaube ich verstehe jetzt alles. Ich habe zzz-default ausprobiert, aber es ist nicht genau das Verhalten, das ich wollte. Die Einstellung ServerName example.comin der Standardkonfiguration funktioniert jedoch hervorragend. Vielen Dank!
John Debs
4

Haben Sie irgendwo eine NameVirtualHost *: 80-Direktive?

Versuchen:

/usr/sbin/apache2 -S

Das zeigt Ihnen, wie Apache die Konfigurationsdatei analysiert. Haben Sie Konfigurationen mit tatsächlichen IPs oder alle mit dem *? Vermissen Sie die: 80? Apache mischt diese nicht gern.

Haben Sie standardmäßig einen Servernamen domain.com oder ServerAlias ​​domain.com?

Karmawhore
quelle
Ja, ich habe es in meiner /etc/apache2/posts.conf. Ich werde der Frage eine Zusammenfassung hinzufügen, die es hoffentlich klarer macht.
John Debs
Meine 000-Standardkonfiguration ist unberührt, sie hat keine ServerName- oder ServerAlias-Anweisungen.
John Debs
NameVirtualHost ist veraltet.
Sam
0

Das hat funktioniert:

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

Wenn ich einen Tippfehler hatte, funktionierte er NICHT (die ServerName-Direktive zweimal):

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

Wenn ich die ServerName-Direktive zweimal hatte, wurde sie immer wieder auf die erste aufgelistete Site aufgelöst (hier nicht gezeigt).

hoffe das hilft jemandem ...

Sam
quelle
0

Ich hatte ein ähnliches Problem und habe es behoben, indem ich explizit einen Servernamen in der Hauptdatei httpd.conf festgelegt habe, anstatt Apache automatisch herausfinden zu lassen, dass dies der Fall ist. Ich gehe davon aus, dass das, was Apache entschieden hat, dasselbe war wie mein vhost (später definiert), so dass der Standard "gewonnen" wurde und die vhost-Einstellung überschrieb.

Ich habe gerade den httpd.conf-Servernamen auf einen Hostnamen gesetzt, den der Computer hat. Ich werde niemals Webseiten für bereitstellen.

sstteevvee
quelle