Apache VirtualHost liefert keine Seite aus

6

Ich habe einen Domainnamen, der mit meiner IP-Adresse zu Hause verknüpft ist. Ich möchte jedoch denselben Server / dieselbe IP-Adresse verwenden, um mehrere Websites anzuzeigen.

Ich kann Virtual Hosts nicht zum Laufen bringen.

Meine conf.d / virtual.conf ist:

NameVirtualHost 192.168.10.151:80

Meine verfügbaren Websites / www.mydomain.com sind:

Listen 80
<VirtualHost *>
        ServerAdmin     [email protected]
        ServerName      www.mydomain.com
        ServerAlias     mydomain.com

        #Indexes and Directory Root
        DirectoryIndex  index.html index.php
        DocumentRoot    /media/BigDisk/www/www.mydomain.com/

        # Log Files
        ErrorLog        /media/BigDisk/www/www.mydomain.com/logs/error.log
        CustomLog       /media/BigDisk/www/www.mydomain.com/logs/access.log combined
</VirtualHost>

Und die Seite wurde mit a2ensite aktiviert und Apache neu geladen, ohne irgendwelche Warnungen oder Fehler, aber wenn ich gehe zu www.mydomain.com Ich bekomme nichts ("Opps! Google Chrome konnte keine Verbindung herstellen ...").

Was mache ich falsch?

Aktualisieren: Ein Neustart von Apache führt zu folgenden Ergebnissen:

malfist@webhost:~$ sudo /etc/init.d/apache2 restart
[sudo] password for malfist:
 * Restarting web server apache2                                                                                                                       apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
[Thu Sep 01 12:16:22 2011] [warn] NameVirtualHost 192.168.10.151:80 has no VirtualHosts
[Thu Sep 01 12:16:22 2011] [warn] NameVirtualHost *:80 has no VirtualHosts
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
[Thu Sep 01 12:16:22 2011] [warn] NameVirtualHost 192.168.10.151:80 has no VirtualHosts
[Thu Sep 01 12:16:22 2011] [warn] NameVirtualHost *:80 has no VirtualHosts
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.
Malfist
quelle

Antworten:

5

Überprüfen Sie die Namensauflösung

Erste Benutzung nslookup oder dig oder host Überprüfen Sie, ob www.mydomain.com auf die statische externe IP-Adresse Ihres Routers verweist.

Überprüfen Sie die Router-Konfiguration

Vergewissern Sie sich dann, dass der Router die Portweiterleitung konfiguriert hat, sodass an Port 80 an der externen Schnittstelle eingehende Anforderungen an Port 80 an der privaten IP-Adresse Ihres Servers weitergeleitet werden.

Überprüfen Sie die ISP-Einschränkungen

Prüfen Sie dann, ob die Nutzungsbedingungen Ihres ISP einen HTTP-Dienst zulassen. Einige ISPs blockieren eingehende HTTP-Verbindungen.

LAN! = Internet

Denken Sie zum Schluss daran, dass Sie, wenn Sie dies in Ihrem LAN testen, eine andere IP-Adresse für www.mydomain.com benötigen, die Sie hinzufügen können 192.168.10.151 www.mydomain.com in Ihre Hosts-Datei (z. /etc/hosts oder C:\WINDOWS\system32\drivers\etc\hosts ). Malfist hat in einem Kommentar darauf hingewiesen: Wenn der Router NAT-Reflection unterstützt, ist dies nicht erforderlich.


Aktualisieren:

Überprüfen Sie die Apache-Fehlerprotokolle (alle).

"Konnte keine Verbindung herstellen" weist eher auf ein grundlegendes IP-Verbindungsproblem als auf ein Apache vhost-Konfigurationsproblem hin. Letzteres führt mit größerer Wahrscheinlichkeit zu einer HTTP-Antwort von 404 oder 500. Wenn die Anforderung Apache erreicht, sollte ein Eintrag im Fehlerprotokoll angezeigt werden. Wenn dort kein Eintrag vorhanden ist, ist dies ein guter Indikator dafür, dass Apache keine Anforderung erhält.

Folgen Sie von Apache gemeldeten Warnungen und Fehlern

NameVirtualHost *: 80 hat keine VirtualHosts

Sehen häufige Fehlkonfigurationen

Mehrere NameVirtualHost-Zeilen führen zu einer Warnung "NameVirtualHost *: 80 hat keine VirtualHosts". Apache ignoriert die zweite Direktive und verwendet die erste definierte Zeile NameVirtualHost. Dies scheint der Fall zu sein, wenn mehrere Konfigurationsdateien für virtuelle Hosts verwendet werden und es nicht bekannt ist, dass Sie nur eine bestimmte NameVirtualHost-Zeile definieren müssen. Wie oben beschrieben, kann dies in der debian ports.conf-Datei vor allem nach einem Upgrade auftreten.

Bereits verwendete Adresse: make_sock: konnte nicht an Adresse 0.0.0.0:80 gebunden werden

Ein anderes Programm lauscht bereits auf Port 80. Verwenden Sie netstat -anp um herauszufinden was, dann hör auf.

Diagnosewerkzeuge

Ethernet-Sniffer

Ich würde einen Netzwerk-Sniffer (z. B. tcpdump oder wireshark) auf dem Apache-Server verwenden, um zu ermitteln, welche eingehenden HTTP-Anforderungen eingehen.


Update 2:

Wget

Ein weiteres gutes Diagnosetool besteht darin, dies auf dem Server auszuführen

 wget --header="Host: www.mydomain.com" -O - http://localhost

Dies ist die Art von Ausgabe, die Sie sehen sollten

[root@mybox logs]# wget --header="Host: foo.bar" -O - http://localhost
--2011-09-01 18:56:08--  http://localhost/
Resolving localhost... 127.0.0.1
Connecting to localhost|127.0.0.1|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 125 [text/html]
Saving to: `STDOUT'

 0% [                                       ] 0           --.-K/s              <html>
 <head>
  <title>mybox</title>
 </head>
 <body>
  <h1>mybox</h1>
  <p>Nothing to see, move along</p>
 </body>
</html>
100%[======================================>] 125         --.-K/s   in 0s

2011-09-01 18:56:08 (10.8 MB/s) - `-' saved [125/125]

[root@mybox logs]# tail -n 1 access_log
127.0.0.1 - - [01/Sep/2011:18:56:08 +0100] "GET / HTTP/1.0" 200 125 "-" "Wget/1.11.4 Red Hat modified"

Ergänzen Sie die -S Option zu wget um die Antwortheader des Servers zu sehen.

Wenn Sie so etwas wie "Verbindung abgelehnt" erhalten, lauscht Apache nicht auf Port 80.

Netstat

Die Ausgabe von netstat -anp sollte beinhalten

tcp        0      0 :::80        :::*       LISTEN      12345/httpd
RedGrittyBrick
quelle
Mein Router unterstützt NAT-Reflexion, sodass ich auf meine öffentliche IP-Adresse verweisen kann und der Router kein Problem hat. Der DNS-Eintrag für die Domain ist korrekt und mein ISP ist das egal. Ich lief gut (einzelne Domain auf Laptop), bis ich mich für Virtual Hosts entschied, und jetzt funktioniert es nicht mehr.
Malfist
Antwort aktualisiert.
RedGrittyBrick
Ich führe eine andere Version von Chrome bei der Arbeit aus und gibt die Fehlermeldung "tcp_error" und "Verbindung abgelehnt" aus. Klärt das mehr? Ich weiß, dass der IP / DNS-Eintrag korrekt ist, da ich den Port 8080 an eine andere Box innerhalb des LAN weitergeleitet habe, und ich kann es problemlos erreichen.
Malfist
"Verbindung abgelehnt" deutet auf ein Problem in der Routerkonfiguration hin. Wenn Apache normal konfiguriert ist und Port 80 überwacht, lehnt Ihr Server keine Verbindungen ab. Haben Sie die Fehlerprotokolle geprüft und einen Netzwerk-Sniffer verwendet, wie ich vorgeschlagen habe?
RedGrittyBrick
Der Router hat die Verbindung zugelassen, bis ich Apache auf virtuelle Hosts umgestellt habe. Wenn ich die Konfiguration von Apache zurückstelle, wird die Seite erfolgreich aufgelöst.
Malfist
1
NameVirtualHost  *:80

Das ist in /etc/apache2/ports.conf. Wenn Sie es löschen oder auskommentieren und Apache neu starten, verschwindet die Warnung.

carlos
quelle
1

Ich habe Stunden damit verbracht und alles, was ich tun musste, ist meine IP-Adresse ifconfig eth0 down zu veröffentlichen. Es wurde statisch, jetzt erkennt es meinen virtuellen Hostnamen.

Redbike
quelle