Apache2 kann nicht auf einem IPv4-TCP-Port ausgeführt werden

22

Ich muss Apache2 auf meinem Debian 7-Server ausführen. Aber es läuft nur auf dem TCP / V6-Port, nicht auf dem TCP / V4-Port. Ich habe es mit apt-get install installiert. Wenn ich zu localhost oder 127.0.0.1 oder meiner Server-IPv4-Adresse gehe, werden keine Websites angezeigt.

Meine /etc/apache2/ports.conf:

# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default
# This is also true if you have upgraded from before 2.2.9-3 (i.e. from
# Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and
# README.Debian.gz

NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
 # If you add NameVirtualHost *:443 here, you will also have to change
 # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
 # to <VirtualHost *:443>
 # Server Name Indication for SSL named virtual hosts is currently not
 # supported by MSIE on Windows XP.
 Listen 443
</IfModule>

<IfModule mod_gnutls.c>
 Listen 443
</IfModule>

netstat -plntu:

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      3558/sshd       
tcp        0      0 0.0.0.0:3466            0.0.0.0:*               LISTEN      2820/mysqld     
tcp6       0      0 :::80                   :::*                    LISTEN      2097/apache2    
tcp6       0      0 :::22                   :::*                    LISTEN      3558/sshd       
Mato
quelle
3
Versuchen Sie das Listen 80zu ändern Listen 0.0.0.0:80. Weitere Informationen finden Sie in der Dokumentation httpd.apache.org/docs/2.2/bind.html .
Pradeepchhetri
@ pradeepchhetri Danke. Es klappt. Ich kann von jedem Computer aus auf meine Serveradresse zugreifen und Inhalte anzeigen (IP-Adresse / some.php), aber ich kann von diesem Server aus nicht auf some.php zugreifen. Ich habe versucht, localhost, 127.0.0.1 und externe IP: Portnummer, die von einem anderen PC funktioniert ... Aber es funktioniert nicht.
Mato
1
Können Sie die Ausgabe von sudo iptables -nvLund posten sudo sestatus? Ich denke, Sie haben eine lokale Firewall, die verhindert.
Pradeepchhetri
@Mato, das Sie klären müssen, wenn Inhalte angezeigt werden, die aber nicht funktionieren, bedeutet dies, dass das rohe PHP angezeigt wird, anstatt es auszuführen? In diesem Fall müssen Sie das PHP-Modul aktivieren. Ich denke a2enmod php5sollte es für dich tun.
robbat2
3
Linux-Computer verstecken normalerweise einen Dualstack-IPv4 + IPv6-Socket hinter dem Abhören der IPv6-Adresse ::.
Pavel Šimerda

Antworten:

31

Die Tatsache, dass netstat hier nur tcp6 anzeigt, ist nicht das Problem. Wenn Sie keine Adresse angeben, die abgehört werden soll, überwacht Apache alle unterstützten Adressfamilien über einen einzelnen Socket (aus Designgründen verwendet sshd einen eindeutigen Socket pro Adresse und Adressfamilie und wird daher in Ihrer netstat-Ausgabe zweimal angezeigt).

Hier ist eines meiner Systeme, das zeigt, dass Apache nur über TCP6-Sockets verfügt und dennoch über IPv4 und IPv6 einwandfrei funktioniert.

woodpecker ~ # netstat -anp |grep apache
tcp6       0      0 :::80    :::*       LISTEN      1637/apache2        
tcp6       0      0 :::443   :::*       LISTEN      1637/apache2        
woodpecker ~ # wget http://127.0.0.1/ -O /dev/null
--2013-12-25 08:52:38--  http://127.0.0.1/
Connecting to 127.0.0.1:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 45 [text/html]
...
# wget http://[::1]/ -O /dev/null
--2013-12-25 08:53:00--  http://[::1]/
Connecting to [::1]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 45 [text/html]
...

Wenn Sie wget http://127.0.0.1/ -O -auf dem Server laufen, was passiert dann? Wird die Verbindung erfolgreich hergestellt? Gibt es den Roh-HTML-Code für Ihre Website wie erwartet zurück?

robbat2
quelle
danke, jetzt funktioniert es, aber ich habe nur ein kleines Problem noch. Ich habe darüber oben geschrieben.
Mato
Sie wissen, das Verrückte ist, dass dies immer meine Erfahrung war. Natürlich. Als Netzwerkprogrammierer kenne ich mich gut mit INADDR_ANYund aus IN6ADDR_ANY_INIT. Aber heute habe ich ein wirklich merkwürdiges Verhalten gesehen. Keine Firewall-Änderungen, keine Apache-Änderungen, aber irgendwie können Remote-Hosts nur über IPv6 eine Verbindung herstellen - ein Problem für diejenigen, die noch kein IPv6 haben. Es ist sicherlich etwas, woran ich arbeiten werde, aber Sie sind absolut korrekt (obwohl die von Ihnen gegebene Aufforderung in meinem Fall leider nicht zutrifft).
15.
1
  1. 127.0.0.1 ist nur für einen Computer lokal. Sie müssen sich auf dem Server selbst in einem Browser befinden, um die lokale Loopback-IP / -Adresse zu verwenden.

  2. Möglicherweise blockiert eine Firewall die Ports.

  3. Stellen Sie sicher, dass Apache ausgeführt wird und ordnungsgemäß funktioniert, und überprüfen Sie die Fehlerprotokolle.

  4. Überprüfen Sie alle Ihre Apache-Konfigurationen;

  5. Hostest du aus dem Stammverzeichnis www oder dem Benutzerverzeichnis public_html?

  6. Überprüfen Sie den Eigentümer und die Berechtigungen.


Fast das Jahr 2019 (Willkommen in der Zukunft):

  • Standardmäßig verwendet der größte Teil der Welt ipv6. Wenn dies fehlschlägt, wird auf ipv4 zurückgegriffen.

  • Wir haben jetzt IPv4-Tunnel über IPv6 und umgekehrt.

  • Die meisten Betriebssysteme, Programme, Clients und Server tun dies jetzt meistens.

  • Willkommen in der Welt, in der es keine NATs mehr gibt und in der Sie jetzt auf Firewall / Filter für Ihr Gerät angewiesen sind.

  • Ich würde empfehlen, dass Sie versuchen, Ihre Systeme alle doppelt gestapelt zu halten, wobei sowohl ipv4 als auch ipv6 gleichzeitig unterstützt werden. Mein Betriebssystem, Netzwerk und sogar mein ISP sind durchgängig doppelt gestapelt. Ich könnte ipv4 vollständig ausschalten, wenn ich wollte, aber was da draußen ist, könnte nicht mehr funktionieren, wenn keine Tunnel mehr von ipv4 zu ipv6 existieren.

cdmlb
quelle
Ich habe überlegt, ob ich Ihnen eine +1 geben soll oder nicht, da Sie das Wort "Ordner" verwendet haben. Die Idee, IPv6 nicht zu deaktivieren, ist jedoch so wichtig - ebenso wie sicherzustellen, dass Ihre Firewall ordnungsgemäß für IPv6 konfiguriert ist. Ich weiß, dass viele Leute denken, NAT sei Sicherheit, aber das ist höchstens eine Illusion (es ist auch ein Problem für viele Dienste). Das und Ihre anderen Punkte sind alle gültig, haben Sie also eine +1.
15.
Es tut mir leid, ich meinte Verzeichnis :-P
cdmlb
Gut, dafür würde ich dir noch +1 geben, wenn ich könnte. Ich bin ziemlich überrascht und auch gedemütigt, dass du es ändern würdest. Ich bin ein Purist, denke ich, alles was ich sagen kann. Es irritiert mich und ärgert mich, dass eine bestimmte Firma es korrigiert und dann in "Ordner" geändert hat. Nun, vielleicht, um es "freundlicher" für die Menschen zu machen, aber dann scheint es als das richtige Wort für andere akzeptiert worden zu sein, die es besser wissen sollten. Ich weiß es nicht. Wie auch immer, deine gesamte Liste ist etwas, von dem ich mir wirklich wünsche, dass mehr Leute es verstehen würden!
Leider
-1

*

wget http://127.0.0.1/ -O / dev / null

* steht für die Verbindung zum lokalen Server ohne IPv4- oder IPv6-Verarbeitung. Wenn Sie localhost (oder 127.0.0.1) in die echte IPv4-IP-Adresse dieses Servers ändern, kann keine Verbindung hergestellt werden, da die Verbindung verweigert wird.

Versuchen Sie, Ihre IP in Konfigurationsdateien zu beschreiben: NameVirtualHost: 80 Listen: 80

Gast
quelle