it-swarm.com.de

VirtualHost gibt unter Ubuntu 14.04 immer den Standardhost mit Apache zurück

Ich versuche, neben der Standardvariable localhost einen virtuellen Host einzurichten. Wenn ich versuche, meinen virtuellen Host http://test anzurufen, erhalte ich die standardmäßige Apache2-Indexdatei, die sich im Verzeichnis http://localhost befindet. Außerdem gibt Apache diese Seite nach dem Deaktivieren (a2dissite) beider VirtualHost-Dateien und dem erneuten Laden von Apache (service Apache2 reload) zurück.

Was könnte schief gehen, dass der virtuelle Host nicht funktioniert?

Aufbau:

Meine Verzeichnisstruktur ist folgende:

/var/www/html                  # Default localhost dir
/var/www/html7index.html       # Apache2 default index

/var/www/test                  # HTML dir for the virtual Host
/var/www/test/index.html       # My "website" 

Inhalt von /etc/hosts:

127.0.0.1       localhost
127.0.1.1       Laptop
127.0.0.1       test

Verzeichnisinhalt von /etc/Apache2/sites-available:

000-default.conf
default-ssl.conf
test.conf

Datei 000-default.conf:

<VirtualHost localhost:80>
        ServerName localhost
        ServerAdmin [email protected]
        DocumentRoot /var/www/html
        ErrorLog ${Apache_LOG_DIR}/error.log
        CustomLog ${Apache_LOG_DIR}/access.log combined
</VirtualHost>

Datei test.conf:

<VirtualHost test:80>
        ServerAdmin [email protected]
        ServerName test
        NameVirtualHost test
        ServerAlias test
        DocumentRoot /var/www/test
        ErrorLog ${Apache_LOG_DIR}/error.log
        CustomLog ${Apache_LOG_DIR}/access.log combined
</VirtualHost>
31
Simon

tl; dr: Nenne es mit Sudo : Sudo service Apache2 reload


Sieht aus, als hätte mich das Verhalten von service Apache2 reload getäuscht. Siehe folgendes Protokoll:

[email protected]:/etc/Apache2/sites-available$ Sudo a2ensite test.conf 
Enabling site test.
To activate the new configuration, you need to run:
  service Apache2 reload
[email protected]:/etc/Apache2/sites-available$ service Apache2 reload
 * Reloading web server Apache2                                                  * 
[email protected]:/etc/Apache2/sites-available$

Versuchen Sie, http://test zu erreichen: funktioniert nicht

[email protected]:/etc/Apache2/sites-available$ Sudo service Apache2 reload
 * Reloading web server Apache2                                                  * 
[email protected]:/etc/Apache2/sites-available$

Versuchen Sie, http://test:WORKINGzu erreichen.

Finden Sie also den Unterschied! Der Punkt ist, dass ich dachte, dass es von Anfang an richtig geladen worden wäre. Es gibt auch keine Einträge in den Protokolldateien. Aufruf mitSudohelp. Ist das ein Fehler?

43
Simon

Ich war mit diesem Problem konfrontiert und es stellte sich heraus, dass ich den virtuellen Standardhost deaktivieren musste.

Sudo a2dissite 000-default.conf

Mögliche Erweiterung:

Laut der Apache-Dokumentation Eine ausführliche Diskussion des Virtual Host Matching :

[...] Wenn der Hauptserver zu diesem Zeitpunkt keinen Servernamen hat, wird stattdessen der Hostname des Rechners verwendet, auf dem httpd ausgeführt wird.

Das bedeutet, wenn für den Standard-vhost (normalerweise 000-default.conf) kein Servername festgelegt ist - , der der Standardwert ist - wird Apache auf den Hostnamen des Betriebssystems zurückfallen.

Aus diesem Grund wählt und bedient Apache den Standard-vhost (000-default.conf), obwohl ein anderer, vom Benutzer erstellter vhost mit demselben Servernamen wie der Hostname des Computers konfiguriert ist.

Der Grund ist, dass Apache die vhosts alphabetisch nach Dateiname sortiert und die erste vhost-Konfiguration auswählt, die mit dem angeforderten HTTP-Host-Header übereinstimmt. Daher wird die 000-default.conf vor benutzerdefinierten vhosts überprüft, da ihnen normalerweise 000- nicht vorangestellt wird.

48
Eduardo Dennis

Wenn Sie nur darauf hinweisen, kann dies für erfahrene Benutzer offensichtlich sein, aber nicht so sehr, wenn Sie einen ersten Timer haben.

stellen Sie sicher, dass die in /sites-enabled verwendete Konfiguration mit einem .conf endet, der in Ihrem Apache2.conf erwartet wird.

Das war mein Problem und es wurde behoben.

5
Philll_t

Wenn Sie bereits Folgendes versucht haben:
1. Geprüfte Berechtigungen für den Stammordner und den übergeordneten Ordner des Dokuments.
2. a2dissite 000-default usw.
3. Apache neu gestartet mit Sudo-Dienst Apache2 reload
Und es funktioniert immer noch nicht, dann machen Sie folgendes:

1. Aktivieren Sie die Debug-Protokollierung:
vi /etc/Apache2/Apache2.conf
LogLevel debug

2. Starten Sie Apache2 neu und überwachen Sie die Protokolle
Sudo service Apache2 restart
tail -f /var/log/Apache2/*.log

3. Beachten Sie, wenn die IP des Servers wie erwartet in den Protokollen angezeigt wird:

==> /var/log/Apache2/other_vhosts_access.log <== ip-xxx-xx-xx-xx.eu-west-2.compute.internal: 80 xx.78.xx.2xx - - [13/Sep/2017: 18: 40: 44 +0100] "GET/HTTP/1.1" 200 3509 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv: 55.0) Gecko/20100101 Firefox/55.0"

Sie werden feststellen, dass anstelle von xxx.xx.xx.xx: 80 eine typische IP-Adresse verwendet wird 
Ich habe ein FQDN wie "ip-xxx-xx-xx-xx.eu-west-2.compute.internal: 80"
Ich benutze AWS Elastic IPs, um eine feste IP für meinen Amazon EC2-Webserver zu erstellen.

4. Überprüfen Sie den Kopf der .conf-Datei Ihrer virtuellen Hosts

<VirtualHost 127.0.0.1:80 11.22.33.44:80>
# Added from nessus to make more secure
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
ServerName mydomain.com
...

OK, was wir hier sehen, ist, dass wir Apache sagen, dass er diesen vhost für Anfragen von 127.0.0.1 oder 11.22.33.44 an Port 80 bereitstellt. Der Server sieht diese IPs jedoch nie, da er den seltsamen FQDN erhält und daher nie passt! Eureka!

LÖSUNG:
Fügen Sie dem VirtualHost-Tag *: 80 hinzu, damit es so aussieht:

<VirtualHost 127.0.0.1:80 11.22.33.44:80 *:80>


UND Apache neu starten. Ich hoffe das hilft. Es kann andere Gründe geben, aber wenn dies die Ursache Ihres Problems ist, ist es Zeit, sich zurückzulehnen, einen Cuppa-Tee zu trinken und sich zu entspannen! Wenn nicht, hoffe ich, dass Sie die Lösung finden.

PS. Denken Sie daran, Ihre Protokolle zurückzusetzen, um zu warnen und nicht zu debuggen!

3
Mark Zaretti

Ich habe all diese Lösungen durchgesehen und keine hat funktioniert. Dann entschied ich mich, zurück zu gehen und die Datei Apache2.conf zu überprüfen. Ich entdeckte, dass die Zeile, die die "sites-enabled" conf-Dateien enthält, standardmäßig auskommentiert wurde. Durch das Auskommentieren der Zeile und einen Neustart von Apache wurde mein Problem behoben (es lag nahe am Ende der Datei):

# Include the virtual Host configurations:
IncludeOptional sites-enabled/*.conf 
2
Dave

wenn Sie die Standardeinstellung mit *: 80 beibehalten; * .443 Vergewissern Sie sich, dass es sich unten befindet - benennen Sie also 000-default in zzz-default um

1
user2628020

es hat mich auch verrückt gemacht, ich habe meine .conf-Dateien immer und immer wieder überprüft, alles war absolut korrekt definiert. Am Ende dieses Beitrags versuchte ich, die Befehle a2ensite und a2dissite als Sudoer auszuprobieren, Apache neu zu starten und dabei immer noch auf der Standard-Willkommensseite von Apache zu landen, als hätte Apache die Standard-Site niemals deaktiviert oder meinen neuen virtuellen Host an Bord genommen.

Es stellte sich heraus, dass ich versucht hatte, Apache ohne Sudo neu zu starten ...

service Apache2 restart

benutzen 

Sudo service Apache2 restart
1
Arnaud Bouchot

In meinem Fall zu Apache 2.4 wurde das Problem durch Hinzufügen der folgenden Einstellung zur Konfiguration des virtuellen Hosts gelöst:

Listen 80

so dass die Einstellungen so sind:

Listen 80
<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName testsite.com
    ServerAlias www.testsite.com
    DocumentRoot /var/www/testsite
    ErrorLog ${Apache_LOG_DIR}/error.log
    CustomLog ${Apache_LOG_DIR}/access.log combined
</VirtualHost>
0
baltasvejas

Das hat mich mehr als einmal gebissen; manchmal würde ich es mit Sudo aktivieren - manchmal nicht.

Ubuntu 14.04 scheint in beiden Fällen dieselbe Meldung anzuzeigen. Bei einer Geschwindigkeit von 100 Meilen pro Stunde verpassen Sie manchmal eine oder mehrere Sudo.

Das Symptom, dass die neue Website auf ein falsches Verzeichnis zurückgesetzt wurde, war mein einziger Hinweis, dass die Aktivierung nie stattgefunden hat. Ich würde sagen, es ist ein Fehler. 

Es sollte mindestens warnen, wenn ein Befehl nicht ausgeführt wird !!!

0
WBing

Sie müssen die Standard-HTML-Datei (/var/www/html/index.html) durch Ihre Site ersetzen oder die Datei in etwas wie index.html.bak umbenennen. Aus irgendeinem Grund verwendet Apache standardmäßig die index.html, sofern Sie sie nicht ändern.

0
Rex Linder

Für mich begann es nach dem Neustart von Apache mit: Sudo service Apache2 reload. Und drücken Sie Strg + F5 auf http:/test.

0
masteryoda

Ich habe dies bei der Verwendung eines vollqualifizierten Domänennamens (FQDN) in der Datei/etc/hosts festgestellt, die der Site entspricht, zu der ich eine Verbindung herstellen wollte. Um dieses Problem zu lösen, musste ich den FQDN in einen anderen Namen als einen meiner VirtualHost-ServerName-Werte umbenennen.

In anderen Worten, wenn mein/etc/hostname war:

Apple

Und in meinen/etc/hosts hatte ich:

192.168.54.34 Apple.example.com Apple

Und in meiner /etc/Apache2/sites-enabled/Apple.example.com.conf hatte ich:

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName Apple.example.com
    DocumentRoot /var/www/Apple.example.com
    DirectoryIndex index.html index.php
</VirtualHost>

Apple.example.com würde von der Datei 000-default.conf akzeptiert, da sie auch in der Datei/etc/hosts aufgeführt ist. Um das Problem zu lösen, habe ich den FQDN meines Servers in der Datei/etc/hostname wie folgt geändert:

server1

und/etc/hosts file:

192.168.54.34 server1.example.com server1
0
kojow7