# Plusieurs ports 80 en écoute



## SuperCed (16 Décembre 2004)

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 :

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


----------



## kabutop (19 Décembre 2004)

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.


----------



## SuperCed (20 Décembre 2004)

OK, j'ai tout compris.
Merci.


----------

