web-dev-qa-db-fra.com

Comment puis-je faire écouter Apache Web Server sur deux ports différents?

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

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

Comment puis-je lui faire écouter 80 et 8080?

45
Owen

Une installation Debian standard d'Apache aura le fragment de configuration suivant:

 Listen 80 
 
 <IfModule mod_ssl.c> 
 # Les hôtes virtuels basés sur le nom SSL ne sont pas encore pris en charge, donc pas de 
 # Instruction NameVirtualHost ici 
 Écoutez 443 
 </IfModule> 

Cela indique à Apache d'écouter sur le port 80 et d'écouter le port 443 si mod_ssl est configuré. Dans votre cas, vous souhaitez:

Listen 80
Listen 8080

Vous devez vous assurer que vous exécutez un redémarrage, pas une opération de rechargement sur Apache pour qu'il prenne en compte les nouvelles directives Listen. La chose la plus sûre à faire est d'arrêter Apache, assurez-vous qu'il est mort et redémarrez-le.

Si cette configuration ne fonctionne pas, vérifiez les fichiers journaux pour tout message d'erreur. Vous pouvez utiliser "netstat -lep --tcp" pour voir s'il y a quelque chose à écouter sur le port 8080. Enfin, si tout le reste ne fonctionne pas, essayez d'exécuter Apache sous strace pour voir s'il essaie de se lier à ce port et échoue, mais sans enregistrer le problème.

64
David Pashley

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

Si vous l'avez déjà fait et que cela ne fonctionne toujours pas, assurez-vous d'avoir correctement configuré vos directives pour chaque sous-domaine que vous pouvez avoir, 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 *:*>.

7
msanford

É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 à eux 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       
5
Rajat

Vous devrez peut-être configurer un site un port 8080 pour que cela fonctionne. Lisez la documentation de Apache Virtual Hosts . Chaque "site" peut être configuré pour accepter des connexions sur des ports spécifiques (et IP, etc.). Avez-vous un hôte virtuel dans votre http.conf qui est uniquement configuré pour le port 80?

Vous pouvez également confirmer que le serveur écoute sur 8080 en utilisant netstat -nlp et à la recherche d'une entrée sur ce port.

0
Dana the Sane

Vous pouvez é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 montre 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

0
Reamer77

En supposant que Linux s'exécute netstat -lntp aussi root que vous pouvez voir si Apache écoute sur 8080 ou non. Cela vous aidera à identifier si le problème est qu'Apache n'écoute pas ou s'il existe des facteurs externes (par exemple, pare-feu, selinux, etc.) à Apache rendant la connexion expirée.

0
Jason Tan