Plusieurs ports 80 en écoute

SuperCed

Membre expert
Club iGen
20 Juin 2001
1 347
72
45
superced.rb38.eu
J'ai un serveur chez OVH (Linux Red Hat 7.2), et apache lancé et activé dessus.
Tout ça fonctionne très bien.

J'ai fait un petit :
Bloc de code:
lsof -i tcp

et je me suis apperçu qu'il y avait plusieurs port 80 (http) en écoute (LISTEN). En fait, il y a 10 processus http avec l'utilisateur nobody qui écoutent sur ce même port, et un avec l'utilisateur root.

Je voulais savoir comment il est possible que des processus différents écoutent sur un seul et même port. Dh'abitude, quand j'essaye de faire ça en programmant avec les socket BSD, on me refuse de faire un bind car le port est déjà en écoute.
D'autre part, comment l'utilisateur nobody peut-il se mettre en écoute sur le port 80 étant donné que celui-ci est dans la plage des ports admin (0-1023 je crois).
Pourquoi apache a-t-il besoin de lancer 10 processus concurrents?
Quand un utilisateur se connecte au site, quel est le processus qui prend le accept.

J'ai essayé de killer les processus http de nobody, mais ceux-ci se relancent automatiquement. Je pense donc qu'il sont controllés par le processus http de l'utilisateur root. Cependant, il ne semble pas y avoir de fork() car les processus de nobody ne sont pas des fils du processus de root.

Est-ce tout simplement la commande lsof qui se trompe et me répond des choses que j'ai mal interprétées?

Bref, je cherche à avoir des infos supplémentaires là dessus.

Je remarque que sous MacOS X (10.3.6), c'est la même chose sauf que seulement 4 processus de l'utilisateur http sont lancé en plus du root.
 
Salut,
C'est tout à fait normal. Les nobody sont bien les fils du process apache root.
Voici le copié/collé de la doc d'apache. Bonne lecture ;)

Si la directive ServerType est définie avec la valeur recommandée de Standalone, Apache 1.3 sur Unix est basé sur un modèle de prélancement des processus. Un unique processus de contrôle est responsable de lancer des processus fils qui écoutent les connexions et les traitent à leur arrivée. Apache essaye de maintenir un certain nombre de processus en réserve ou inactifs, qui restent toujours prêts à traiter les requêtes arrivantes. De cette manière, les clients n'ont pas à attendre que de nouveaux processus fils soient lancés avant que leurs requêtes soient traitées.


Les directives StartServers, MinSpareServers, MaxSpareServers, et MaxServers régissent comment le processus père crée les processus fils pour traiter les requêtes. En général Apache se régit seul correctement, et la plupart des sites n'ont pas besoin d'ajuster la valeur de ces directives. Les sites qui veulent servir plus de 256 requêtes simultanées doivent augmenter la valeur de MaxClients, tandis que les sites tournant sur des machines limitées en mémoire doivent réduire la valeur de MaxClients afin d'éviter d'utiliser le fichier d'échange. Plus d'informations sur le paramétrage de la création des processus se trouvent dans la documentation Aide sur les performances générales.


Tandis que le processus père est généralement lancé en tant que root sous Unix pour se connecter sur le port 80, les processus fils sont lancés sous un utilisateur moins privilégié. Les directives User et Group servent à définir les privilèges des processus fils. Les processus fils doivent être capable de lire le contenu devant être servi, mais doivent avoir le minimum de privilèges possibles. De plus, à moins que suexec soit utilisé, ces directives définissent également les droits qui seront hérités par les scripts CGI.


MaxRequestsPerChild contrôle la fréquence de rénovation des processus, en supprimant les anciens et en lançant de nouveaux.