Comment faire en sorte qu'Apache Web Server écoute sur deux ports différents?

45

Je voudrais un serveur Web Apache que j'ai installé à la maison pour écouter sur les ports 80 et 8080.

J'ai ajouté Listen 8080à httpd.conf et redémarré les services Apache, mais le serveur ne semble pas écouter sur 8080. Le poinçonnage dans http: // localhost: 8080 fois et n'affiche pas mon index.html mais http: / / localhost affichera mon index.html.

Comment puis-je l'écouter en 80 et 8080?

Owen
la source
Pourquoi pensez-vous qu'il n'écoute pas sur le port 8080? Il pourrait également être utile de publier des extraits de votre configuration.
David Z
1
Avez-vous redémarré Apache après avoir modifié le fichier http.conf?
Dana the Sane
@ David J'ai mis à jour ma question pour montrer pourquoi, à mon avis, il n'écoute pas sur 8080. Vous n'avez pas accès à httpd.conf pour le moment. @ Dana - oui.
Owen

Réponses:

63

Une installation standard d’apache sous Debian aura le fragment de configuration suivant:

Écouter 80

<IfModule mod_ssl.c>
    # Les hôtes virtuels basés sur un nom SSL ne sont pas encore supportés, donc pas
    Déclaration # NameVirtualHost ici
    Écouter 443
</ IfModule>

Ceci indique à apache d'écouter sur le port 80 et d'écouter le port 443 si mod_ssl est configuré. Dans votre cas, vous voudriez:

Listen 80
Listen 8080

Vous devez vous assurer que vous exécutez un redémarrage, et non pas une opération de rechargement sur apache, pour qu'il soit attentif aux nouvelles directives Listen. La chose la plus sûre à faire est d’arrêter Apache, de s’assurer qu’il est mort et de le redémarrer.

Si cette configuration ne fonctionne pas, vérifiez si les fichiers journaux contiennent des messages d'erreur. Vous pouvez utiliser "netstat -lep --tcp" pour voir si le port 8080 est en écoute. Enfin, si tout le reste ne fonctionne pas, essayez d'exécuter Apache sous strace pour voir s'il tente de se connecter à ce port et s'il échoue, mais pas enregistrer le problème.

David Pashley
la source
1
Dans Apache 2.4, où ce fragment de configuration peut-il être trouvé? Merci.
Luís de Sousa
2
Répondre à ma propre question: /etc/apache2/ports.conf.
Luís de Sousa
7

Ces réponses sont excellentes, mais elles excluent la possibilité qu'Owen ait déjà fait cela ("j'ai ajouté Listen 8080") peut vouloir dire exactement ce que cela ressemble (c'est-à-dire ce que David a suggéré).

Si vous avez déjà fait cela et que cela ne fonctionne toujours pas, assurez-vous que vous avez correctement configuré vos directives pour chaque sous-domaine que vous possédez, y compris celui par défaut (s'il a été configuré manuellement pour écouter: 80 juste après le nom).

Vous avez probablement une directive comme celle-ci:

<VirtualHost *:80>
 ServerName michaelsanford.com
 etc…
</VirtualHost>

Vous devez changer cela en <VirtualHost *:8080>ou <VirtualHost *:*>.

msanford
la source
Je soupçonne que c'est mon problème. Je pense avoir une directive <VirtualHost *: 80>. Je vais devoir vérifier ça.
Owen
1
Si vous n'avez pas d'hôte virtuel, le contenu de DocumentRoot global vous sera fourni, ce qui vous donnera probablement un index.html standard, une page d'index de répertoire, une erreur 404 ou 403. Il ne serait pas expiré.
David Pashley
2
On dirait que vous avez un pare-feu en place qui laisse tomber les paquets en silence.
msanford
En fin de compte, il s'agissait d'un problème de pare-feu.
Owen
5

Étape 1

#vi httpd.conf
Listen 80

<IfModule mod_ssl.c>
    # SSL name based virtual hosts are not yet supported, therefore no
    # NameVirtualHost statement here
    Listen 443
</IfModule>

httpd (apache) pour écouter sur le port 80 et pour écouter le port 443 si mod_ssl est configuré.

Listen 80
Listen 8080

Étape 2

#su - service httpd restart

Étape 3

$ netstat -lntp

(Tous les processus n'ont pas pu être identifiés, les informations sur les processus n'appartenant pas à l'utilisateur ne seront pas affichées. Vous devez être root pour tout voir.)

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:47027               0.0.0.0:*                   LISTEN      -                   
tcp        0      0 192.168.1.1:80              0.0.0.0:*                   LISTEN      -                   
tcp        0      0 192.168.1.1:8080            0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      -                   
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      -                   
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      -                   
tcp        0      0 ::ffff:127.0.0.1:45100      :::*                        LISTEN      3149/java           
tcp        0      0 :::111                      :::*                        LISTEN      -                   
tcp        0      0 :::80                       :::*                        LISTEN      -                   
tcp        0      0 :::57173                    :::*                        LISTEN      3149/java           
tcp        0      0 :::18197                    :::*                        LISTEN      3149/java           
tcp        0      0 :::22                       :::*                        LISTEN      -                   
tcp        0      0 ::1:631                     :::*                        LISTEN      -                   
tcp        0      0 :::40832                    :::*                        LISTEN      3149/java           
tcp        0      0 ::ffff:127.0.0.1:6880       :::*                        LISTEN      3149/java       
Rajat
la source
0

Vous voudrez peut-être également vérifier si SELinux est activé. La configuration SELinux par défaut peut ne pas vous permettre d’exécuter Apache sur des ports non standard. Voici un site qui vous indique si vous utilisez SELinux et comment le désactiver, si vous ne voulez pas ou n'utilisez pas ses fonctionnalités. http://www.crypt.gen.nz/selinux/disable_selinux.html


la source
Ou vous pouvez laisser SELinux activé, si vous utilisez un système SELinux moderne, voyez comment les ports sont étiquetés avec un port semanage -l. voir danwalsh.livejournal.com/9275.html qui s'intitule "Je veux que mon démon apache écoute sur un port différent, mais SELinux l'empêche, que dois-je faire?"
rév
0

Vous devrez peut-être configurer un site sur le port 8080 pour que cela fonctionne. Lisez la documentation sur les hôtes virtuels Apache . Chaque «site» peut être configuré pour accepter les connexions sur des ports spécifiques (et sur les adresses IP, etc.). Votre http.conf contient-il un hôte virtuel configuré uniquement pour le port 80?

En outre, vous pouvez vérifier que le serveur écoute 8080 en utilisant netstat -nlpet recherche une entrée sur ce port.

Dana la saine
la source
1
Non, ce n'est pas bien. Si vous voulez qu'apache écoute sur un port, vous devez utiliser la directive Listen.
David Pashley
1
Eh bien, cela peut sembler correct. Beaucoup de personnes créent des hôtes virtuels tels que <VirtualHost *: 80>. Dans ce cas, vous devrez le remplacer par <VirtualHost *: *> ou créer un autre hôte virtuel pour le port 8080. (Bien sûr, Écouter directive est également nécessaire)
David Z
@ David Pashley, l'auteur a déclaré que la directive Listen avait déjà été ajoutée.
Dana the Sane
0

En supposant que Linux s'exécute en netstat -lntptant que root, vous pouvez voir si Apache écoute 8080 ou non. Cela vous aidera à déterminer si Apache ne vous écoute pas ou s'il existe des facteurs externes (par exemple un pare-feu, Selinux, etc.) à Apache qui retarde la connexion.

Jason Tan
la source