J'ai un serveur avec un tas d'adresses IP, et je veux seulement qu'Apache écoute sur l'une d'entre elles. Cela ne semble pas être une chose difficile à faire, et je l'ai fait une fois auparavant, mais j'ai des problèmes cette fois-ci. Tout d'abord, voici où j'en suis maintenant, à ma connaissance:
Chaque endroit où Apache écoute le port 80, il écoute uniquement sur la bonne IP.
/etc/apache2$ grep -R ":80" .
./sites-available/default:<VirtualHost 192.168.0.82:80>
./httpd.conf:<VirtualHost 192.168.0.82:80>
./ports.conf:NameVirtualHost 192.168.0.82:80
./sites-enabled/000-default:<VirtualHost 192.168.0.82:80>
Il n'y a aucune mention d'écoute sur 0.0.0.0.
/etc/apache2$ grep -R "0\.0\.0\.0" .
Et pourtant ... Apache refuse de commencer.
/etc/apache2$ sudo /etc/init.d/apache2 start
* Starting web server apache2
(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.
[fail]
Au cas où quelqu'un demanderait, je ne suis pas lié à cette adresse:
/etc/apache2$ sudo netstat -nap | grep :80
tcp 0 0 192.168.0.83:80 0.0.0.0:* LISTEN 2822/node
Le journal des erreurs sur /var/log/apache2/error.log
indique simplement:
[Wed Aug 08 03:30:18 2012] [notice] caught SIGTERM, shutting down
Ai-je raté une place dans la configuration d'Apache? Y a-t-il quelque chose dont je ne me souviens pas chercher? Pourquoi n'est-ce pas aussi simple que je m'en souvenais?
Listen 192.168.0.82:80
ligne critique , ce dont j'avais besoin. J'ai choisi la réponse de cjc parce qu'elle expliquait un peu plus en détail pourquoi cette ligne était nécessaire. Je pensais que mentionner les commentaires utilisés dans la version d'Apache fournie avec CentOS était un bon ajout. Mais comme tout le monde semble être généralement d'accord pour dire que la réponse devrait aller à pauska, je suis allé de l'avant et je lui ai donné. Après tout, je remarque en examinant les révisions que le commentaire de pauska a considérablement influencé la réponse de cjc dans sa forme actuelle.Réponses:
Apache se lie à tout par défaut, même si vous spécifiez certaines IP pour exécuter NameVirtualHost.
Ajoutez ceci dans votre ports.conf:
Référence: http://httpd.apache.org/docs/2.2/bind.html
la source
Regardez dans le
/etc/apache2/ports.conf
dossier.Vous trouverez une directive comme:
Le commentaire sur les boîtes CentOS décrit cette option:
Pour ce que vous voulez, changez la
Listen 80
ligne enListen 192.168.0.82:80
.Vous ne pouvez pas démarrer Apache pour le moment car il tente de se lier au port 80 sur toutes les interfaces (désignation 0.0.0.0), et vous avez
node
écouté sur 192.168.0.83:80.L'adresse IP dans les blocs d'hôte virtuel signifie que cet hôte virtuel particulier répondra aux demandes provenant de cette adresse IP. Il ne spécifie pas comment Apache se liera aux interfaces qu'il voit.
la source
grep
qu'il faisait était contre: 80, donc ça allait manquer de toute façon, comme par défautListen 80
.La directive Listen est ce que vous recherchez:
Plus d'informations dans la documentation .
la source
Utilisez les éléments suivants selon les documents Apache :
Dans certaines circonstances (pas toutes), on pourrait aller un peu plus loin et faire ceci:
De cette façon, vous rendez vos configurations apache portables dans les situations où vous avez une batterie de serveurs Apache. Il y a des avantages et des inconvénients à cela (comme avec tout le reste.)
la source