Apache2 ne fonctionne pas sur le port TCP IPv4

23

J'ai besoin d'exécuter Apache2 sur mon serveur Debian 7. Mais il ne fonctionne que sur le port tcpv6, pas sur le port tcpv4. Je l'ai installé avec apt-get install. Si je vais sur localhost ou 127.0.0.1 ou sur l'adresse IPv4 de mon serveur, il n'affiche aucun site Web.

Mon /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
la source
3
Essayez de changer le Listen 80en Listen 0.0.0.0:80. Vous pouvez vous référer à la documentation httpd.apache.org/docs/2.2/bind.html pour plus d'informations.
pradeepchhetri
@pradeepchhetri Merci. Ça marche. Je peux accéder à l'adresse de mon serveur depuis n'importe quel ordinateur et elle affiche le contenu (adresse IP / some.php), mais je n'ai pas accès à some.php depuis ce serveur. J'ai essayé localhost, 127.0.0.1 et IP externe: numéro de port qui fonctionne depuis un autre PC ... Mais cela ne fonctionne pas.
Mato
1
Pouvez-vous publier la sortie de sudo iptables -nvLet sudo sestatus? Je pense que vous avez un pare-feu local qui empêche.
pradeepchhetri
@Mato vous devez clarifier, quand il montre du contenu mais ne fonctionne pas, voulez-vous dire qu'il montre votre PHP brut au lieu de l'exécuter? Si c'est le cas, vous devez activer le module PHP. Je pense que a2enmod php5ça devrait le faire pour vous.
robbat2
3
Les machines Linux cachent généralement un socket double pile IPv4 + IPv6 derrière l'écoute de l'adresse IPv6 ::.
Pavel Šimerda

Réponses:

32

Le fait que netstat affiche uniquement tcp6 ici n'est pas le problème. Si vous ne spécifiez pas d'adresse à écouter, apache écoutera toutes les familles d'adresses prises en charge à l'aide d'un seul socket (pour des raisons de conception, sshd utilise un socket unique par adresse et famille d'adresses, apparaissant donc deux fois dans votre sortie netstat).

Voici un de mes systèmes, montrant apache n'ayant que des sockets tcp6, et fonctionnant toujours bien via IPv4 et IPv6.

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

Si vous exécutez wget http://127.0.0.1/ -O -sur le serveur ce qui se passe? Se connecte-t-il avec succès? Renvoie-t-il le HTML brut de votre site Web comme prévu?

robbat2
la source
merci, maintenant ça marche, mais je n'ai encore qu'un petit problème. J'ai écrit à ce sujet ci-dessus.
Mato
Vous savez, ce qui est fou, c'est que cela a toujours été mon expérience. Naturellement. En tant que programmeur réseau, je connais bien INADDR_ANYet IN6ADDR_ANY_INIT. Mais aujourd'hui, j'ai vu un comportement vraiment étrange. Aucun changement de pare-feu, aucun changement d'Apache, mais les hôtes distants ne peuvent en quelque sorte se connecter que via IPv6 - ce qui est un problème pour ceux qui n'ont toujours pas IPv6. C'est certainement quelque chose que je vais résoudre, mais vous avez absolument raison (bien que l'invocation que vous donnez ne s'applique malheureusement pas dans mon cas).
Pryftan
1
  1. 127.0.0.1 est local sur une machine uniquement, vous devez être sur le serveur lui-même dans un navigateur pour utiliser l'adresse IP / l'adresse de bouclage locale;

  2. Vous pourriez avoir un pare-feu bloquant les ports;

  3. Assurez-vous qu'apache fonctionne et fonctionne correctement, consultez les journaux d'erreurs;

  4. Vérifiez toutes vos configurations apache;

  5. Hébergez-vous à partir du répertoire racine www ou du répertoire utilisateur public_html?

  6. Vérifiez le propriétaire et les autorisations.


Presque l'année 2019 (Bienvenue dans le futur):

  • Par défaut, la plupart du monde utilise ipv6 et en cas d'échec, retombe sur ipv4;

  • Nous avons maintenant des tunnels ipv4 sur ipv6, et vice versa;

  • La plupart des systèmes d'exploitation, des programmes, des clients et des serveurs le font principalement maintenant;

  • Bienvenue dans le monde de plus de NAT et de devoir dépendre maintenant de pare-feu / filtres directement sur votre appareil;

  • Je recommanderais d'essayer de garder vos systèmes tous deux empilés, en prenant en charge à la fois ipv4 et ipv6, donc lorsque le commutateur magique se produit, vous êtes toujours opérationnel. Mon système d'exploitation, mon réseau et même mon FAI sont doubles empilés de bout en bout. Je pourrais désactiver complètement ipv4 si je le voulais, mais ce qui existe pourrait ne plus fonctionner si aucun tunnel n'existe pour ipv6 depuis ipv4.

cdmlb
la source
J'étais sur le point de savoir s'il fallait ou non vous donner un +1 - puisque vous avez utilisé le mot «dossier». Mais l'idée de ne pas désactiver IPv6 est si importante - tout comme vous assurer que votre pare-feu est correctement configuré pour IPv6. Je sais que beaucoup de gens pensent que le NAT est la sécurité mais au plus c'est une illusion (c'est aussi un problème pour de nombreux services). Cela et vos autres points sont tous valables, alors ayez un +1.
Pryftan
Je suis désolé, je voulais dire répertoire :-P
cdmlb
Eh bien, pour cela, je vous donnerais un autre +1 si je le pouvais. Je suis plutôt surpris et aussi humilié que vous le changiez. Je suis puriste, je pense que tout ce que je peux dire. Cela me déroute et me contrarie qu'une certaine entreprise le corrige puis le change en «dossier». Eh bien, c'est peut-être pour le rendre plus «convivial» pour les gens, mais il semble avoir été accepté comme le bon mot pour ceux qui devraient mieux savoir. Je ne sais pas. Quoi qu'il en soit, votre liste entière est quelque chose que je souhaite vraiment que plus de gens comprennent! Hélas, beaucoup ne le font pas ...
Pryftan
-1

*

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

* représente la connexion au serveur local sans gérer IPv4 ou IPv6, si vous changez localhost (ou 127.0.0.1) en véritable adresse IP IPv4 de ce serveur, vous ne pouvez rien faire car la connexion est refusée.

Essayez de décrire votre IP dans les fichiers de configuration: NameVirtualHost: 80 Listen: 80

Client
la source