web-dev-qa-db-fra.com

Devrais-je activer Keepalive à Apache2?

Dans n'importe quelle installation par défaut, Apache 2 est livré avec Keepalive Off, mais en regardant un autre serveur, le module Keepalive a été activé.

Alors, comment puis-je savoir si Keepalive est juste pour moi? Où puis-je trouver de bons exemples de configurer cela?

25
Gabriel Sosa

Il y a déjà 2 bonnes réponses déjà, mais le plus important problème de la vie réelle n'est pas encore mentionné.

Tout d'abord, l'OP pourrait vouloir lire les 2 réponses précédentes et ce petit message de blog pour comprendre ce que sont les conserves. (L'auteur n'explique pas de la part de TCPI/IP obtenant "plus rapide" plus la connexion est ouverte. Il est vrai que les connexions durables bénéficient de échouage de la fenêtre IP , mais l'effet n'est pas 'T significatif que si les fichiers sont importants ou que le produit de la bande passante est exceptionnellement grand.)

Le gros argument contre HTTP Keepalive lors de l'utilisation d'Apache est qu'il bloque les processus Apache. C'est à dire. Un client utilisant des conserves empêchera "son" processus Apache de servir de tout autre client, jusqu'à ce que le client ferme la connexion ou que le délai d'attente soit atteint. Dans le même temps, cette instance Apache aurait pu répondre à de nombreuses autres connexions.

Maintenant, une configuration Apache très courante est la Préfigeoire MPM et a PHP/perl/Python interprète et code d'application dans la langue mentionnée. Dans ce cas, chaque processus Apache est "lourd" en ce sens qu'elle occupe plusieurs mégaoctets de RAM (Apache liés à l'interprète et au code d'application). Ceci, ainsi que le blocage de chaque instance Keepalive'd Apache, est inefficace.

Une solution de contournement commune est d'utiliser 2 serveurs Apache (sur le même serveur physique ou sur 2 serveurs, selon les besoins) avec différentes configurations:

  • un "lourd" avec mod_php (ou quel que soit le langage de programmation utilisé) pour un contenu dynamique, avec des conserveries .
  • un "léger" avec un ensemble minimal de modules, destiné à servir de contenu statique (image, CSS, JS, etc.), avec conserve sur .

Vous pouvez ensuite développer cette séparation de contenu dynamique et statique si nécessaire, par exemple par:

  • utilisation d'un serveur piloté par événement pour le contenu statique, tel que nginx .
  • utilisation d'un CDN pour le contenu statique (pourrait faire tout le contenu statique servant pour vous)
  • mise en œuvre de la mise en cache de contenu statique et/ou dynamique

Une autre approche en ce qui concerne l'évite de blocage Apache consiste à utiliser un équilibreur de charge avec une manipulation de connexion plus intelligente, telle que Perlbal .

.. et beaucoup plus. :-)

31
Jesper M

Les gardereaux peuvent être bons dans certains cas, ils peuvent être très mauvais dans d'autres. Ils réduisent le temps et les efforts de la mise en place d'une nouvelle connexion, mais ils attachent des ressources de serveur pendant la durée du délai de conserve. Exemples:

  • Pages avec de nombreux petits objets, clients sur le numéro de dialup- Keepalive devrait être allumé.
  • Pages avec quelques gros objets - Keepalive ne sera pas un avantage.
  • Server avec un nombre très élevé de visiteurs uniques - Keepalive devrait être désactivé (sinon, les prises et les fils seront assis en mémoire en attente du délai impartial et ne servant pas de nouveaux clients).

Comme vous pouvez le constater, KeepalIserTimeout jouera également un rôle important dans l'optimisation de vos performances de votre serveur.

Regardez votre modèle d'utilisation et décidez pour vous-même.

6
Max Alginin

Vous devriez certainement utiliser Keepalive sur.

Voir:

http://httpd.apache.org/docs/2.0/mod/core.html#eekalive

De cette façon un seul TCP Connection sera réutilisé par le navigateur pour envoyer plusieurs requêtes. Habituellement, un site Web a de nombreux composants (page HTML, code JavaScript, images). Tant que ces ressources sont Dans le même domaine, peut donc être desservi par le même serveur, une connexion Keepalive donne un énorme augmentation de performance puisque le navigateur n'aura pas à établir un nouveau TCP Connection.

Un navigateur ouvre généralement environ 3 connexions parallèles à un domaine. Disons que vous avez 18 objets sur votre site. Le navigateur ouvrirait 3 connexions, et il téléchargerait 6 objets dans chaque connexion - à l'aide du mode Keepalive. Sans Keepalive, il faudrait ouvrir 18 TCP Connections, qui est très lente.

La plupart ou tous les navigateurs modernes sont conformes à HTTP/1.1, cela devrait simplement fonctionner.

Certains proxy de HTTP comme Squid ne sont pas conformes à HTTP/1.1, mais ils demandent de toute façon l'utilisation d'une connexion Keepalive.

0
Yves Junqueira