blob: dec7e1e0eb496cb2774716eb05d4a7ec816f2cea [file] [log] [blame]
willy tarreau0f7af912005-12-17 12:21:26 +01001
2 H A - P r o x y
3 ---------------
willy tarreaua1598082005-12-17 13:08:06 +01004 version 1.1.8
willy tarreau0f7af912005-12-17 12:21:26 +01005 willy tarreau
willy tarreaua1598082005-12-17 13:08:06 +01006 2002/04/16
willy tarreau0f7af912005-12-17 12:21:26 +01007
willy tarreaub719f002005-12-17 12:55:07 +01008================
9| Introduction |
10================
willy tarreau0f7af912005-12-17 12:21:26 +010011
12HA-Proxy est un relais TCP/HTTP offrant des facilités d'intégration en
13environnement hautement disponible. En effet, il est capable de :
14 - assurer un aiguillage statique défini par des cookies ;
willy tarreaua1598082005-12-17 13:08:06 +010015 - assurer une répartition de charge avec création de cookies pour assurer la
16 persistence de session ;
willy tarreau0f7af912005-12-17 12:21:26 +010017 - fournir une visibilité externe de son état de santé ;
18 - s'arrêter en douceur sans perte brutale de service.
willy tarreau5cbea6f2005-12-17 12:48:26 +010019 - modifier/ajouter/supprimer des entêtes dans la requête et la réponse.
willy tarreaua1598082005-12-17 13:08:06 +010020 - interdire des requêtes qui vérifient certaines conditions.
willy tarreau0f7af912005-12-17 12:21:26 +010021
willy tarreaua1598082005-12-17 13:08:06 +010022Il requiert peu de ressources, et son architecture événementielle mono-processus
23lui permet facilement de gérer plusieurs milliers de connexions simultanées sur
24plusieurs relais sans effondrer le système.
25
willy tarreau0f7af912005-12-17 12:21:26 +010026
27===========================
28| Paramètres de lancement |
29===========================
30
31Les options de lancement sont peu nombreuses :
32
33 -f <fichier de configuration>
34 -n <nombre maximal total de connexions simultanées>
35 -N <nombre maximal de connexions simultanées par proxy>
36 -d active le mode debug
37 -D passe en daemon
38 -s affiche les statistiques (si option compilée)
39 -l ajoute des informations aux statistiques
40
willy tarreaua1598082005-12-17 13:08:06 +010041Le nombre maximal de connexion simultanées par proxy est le paramètre par défaut
42pour les proxies pour lesquels ce paramètre n'est pas précisé dans le fichier de
43configuration. Il s'agit du paramètre 'maxconn' dans les sections 'listen'.
willy tarreau0f7af912005-12-17 12:21:26 +010044
willy tarreaua1598082005-12-17 13:08:06 +010045Le nombre maximal total de connexions simultanées limite le nombre de connexions
46TCP utilisables à un instant par le processus, tous proxies confondus. Ce
47paramètre remplace le paramètre 'maxconn' de la section 'global'.
48
willy tarreau0f7af912005-12-17 12:21:26 +010049
50============================
51| Fichier de configuration |
52============================
53
willy tarreau0f7af912005-12-17 12:21:26 +010054Commentaires
55============
56
willy tarreaua1598082005-12-17 13:08:06 +010057L'analyseur du fichier de configuration ignore des lignes vides, les espaces,
58les tabulations, et tout ce qui est compris entre le symbole '#' (s'il n'est pas
59précédé d'un '\'), et la fin de la ligne.
60
61Le fichier de configuration est découpé en sections répérées par des mots clés
62tels que :
63
64 - 'global'
65 - 'listen'
66
67Tous les paramètres font référence à la section définie par le dernier mot clé
68reconnu.
69
70
711) Paramètres généraux
72======================
73
74Il s'agit des paramètres agissant sur le processus, ou bien sur l'ensemble des
75proxies. Ils sont tous spécifiés dans la section 'global'. Les paramètres
76supportés sont :
77
78 - log <adresse> <catégorie>
79 - maxconn <nombre>
80 - uid <identifiant>
81 - gid <identifiant>
82 - chroot <répertoire>
83 - nbproc <nombre>
84 - daemon
85 - debug
86 - quiet
87
881.1) Journalisation des événements
89----------------------------------
90La plupart des événements sont journalisés : démarrages, arrêts, disparition et
91apparition de serveurs, connexions, erreurs. Tous les messages sont envoyés en
92syslog vers un ou deux serveurs. La syntaxe est la suivante :
93
94 log <adresse_ip> <facility>
95
96Les connexions sont envoyées en niveau "info". Les démarrages de service et de
97serveurs seront envoyés en "notice", les signaux d'arrêts en "warning" et les
98arrêts définitifs de services et de serveurs en "alert". Ceci est valable aussi
99bien pour les proxies que pour les serveurs testés au sein des proxies.
100
101Les catégories possibles sont :
102 kern, user, mail, daemon, auth, syslog, lpr, news,
103 uucp, cron, auth2, ftp, ntp, audit, alert, cron2,
104 local0, local1, local2, local3, local4, local5, local6, local7
105
106Exemple :
107---------
108 global
109 log 192.168.2.200 local3
110 log 192.168.2.201 local4
111
1121.2) limitation du nombre de connexions
113---------------------------------------
114Il est possible et conseillé de limiter le nombre global de connexions par
115processus. Les connexions sont comprises au sens 'acceptation de connexion',
116donc il faut s'attendre en règle général à avoir un peu plus du double de
117sessions TCP que le maximum de connexions fixé. C'est important pour fixer le
118paramètre 'ulimit -n' avant de lancer le proxy. Pour comptabiliser le nombre
119de sockets nécessaires, il faut prendre en compte ces paramètres :
120 - 1 socket par connexion entrante
121 - 1 socket par connexion sortante
122 - 1 socket par proxy
123 - 1 socket pour chaque serveur en cours de health-check
124 - 1 socket pour les logs
125
126Positionner la limite du nombre de descripteurs de fichiers (ulimit -n) à
1272 * maxconn + nbproxy + nbserveurs + 1.
128
1291.3) Changement d'uid et de gid
130-------------------------------
131
willy tarreau0f7af912005-12-17 12:21:26 +0100132
133
134Serveur
135=======
136
137Le fichier de configuration contient des sections repérées par le mot
138clé "listen" :
139
140 listen <nom_instance> <adresse_IP>:<port>
141
142<nom_instance> est le nom de l'instance décrite. Ce nom sera envoyé
143dans les logs, donc il est souhaitable d'utiliser un nom relatif au
144service relayé. Aucun test n'est effectué concernant l'unicité de ce
145nom, qui n'est pas obligatoire, mais fortement recommandée.
146
147<adresse_IP> est l'adresse IP sur laquelle le relais attend ses
148connexions. L'adresse 0.0.0.0 signifie que les connexions pourront
149s'effectuer sur toutes les adresses de la machine.
150
151<port> est le numéro de port TCP sur lequel le relais attend ses
152connexions. Le couple <adresse_IP>:<port> doit être unique pour toutes
153les instances d'une même machine. L'attachement à un port inférieur à
1541024 nécessite un niveau de privilège particulier.
155
156Exemple :
157---------
158 listen http_proxy 127.0.0.1:80
159
160
161Inhibition
162==========
163
164Un serveur peut être désactivé pour des besoins de maintenance, sans
165avoir à commenter toute une partie du fichier. Il suffit de
166positionner le mot clé "disabled" dans sa section :
167
168 listen smtp_proxy 0.0.0.0:25
169 disabled
170
171Mode
172====
173
174Un serveur peut fonctionner dans trois modes différents :
175 - TCP
176 - HTTP
177 - supervision
178
179Mode TCP
180--------
181Dans ce mode, le service relaye, dès leur établissement, les
willy tarreau5cbea6f2005-12-17 12:48:26 +0100182connexions TCP vers un ou plusieurs serveurs. Aucun traitement n'est
willy tarreau0f7af912005-12-17 12:21:26 +0100183effectué sur le flux. Il s'agit simplement d'une association
184<adresse_source:port_source> <adresse_destination:port_destination>.
185Pour l'utiliser, préciser le mode TCP sous la déclaration du relais :
186
187 listen smtp_proxy 0.0.0.0:25
188 mode tcp
189
190Mode HTTP
191---------
192Dans ce mode, le service relaye les connexions TCP vers un ou
193plusieurs serveurs, une fois qu'il dispose d'assez d'informations pour
194en prendre la décision. Les entêtes HTTP sont analysés pour y trouver
195un éventuel cookie, et certains d'entre-eux peuvent être modifiés par
196le biais d'expressions régulières. Pour activer ce mode, préciser le
197mode HTTP sous la déclaration du relais :
198
199 listen http_proxy 0.0.0.0:80
200 mode http
201
202Mode supervision
203----------------
204Il s'agit d'un mode offrant à un composant externe une visibilité de
205l'état de santé du service. Il se contente de retourner "OK" à tout
206client se connectant sur son port. Il peut être utilisé avec des
207répartiteurs de charge évolués pour déterminer quels sont les services
208utilisables. Pour activer ce mode, préciser le mode HEALTH sous la
209déclaration du relais :
210
211 listen health_check 0.0.0.0:60000
212 mode health
213
214
215Limitation du nombre de connexions simultanées
216==============================================
217
218Le paramètre "maxconn" permet de fixer la limite acceptable en nombre
219de connexions simultanées par proxy. Chaque proxy qui atteint cette
220valeur cesse d'écouter jusqu'à libération d'une connexion. Voir plus
221loin concernant les limitations liées au système. Exemple:
222
223 maxconn 16000
224
225
226Arrêt en douceur
227================
228
229Il est possible d'arrêter les services en douceur en envoyant un
230signal SIG_USR1 au processus relais. Tous les services seront alors
231mis en phase d'arrêt, mais pourront continuer d'accepter des connexions
232pendant un temps défini par le paramètre "grace" (en millisecondes).
233Cela permet par exemple, de faire savoir rapidement à un répartiteur
234de charge qu'il ne doit plus utiliser un relais, tout en continuant
235d'assurer le service le temps qu'il s'en rende compte. Remarque : les
236connexions actives ne sont jamais cassées. Dans le pire des cas, il
237faudra attendre en plus leur expiration avant l'arrêt total du
238processus. La valeur par défaut est 0 (pas de grâce).
239
240Exemple :
241---------
242
243 # le service tournera encore 10 secondes après la demande d'arrêt
244 listen http_proxy 0.0.0.0:80
245 mode http
246 grace 10000
247
248 listen health_check 0.0.0.0:60000
249 mode health
250 grace 0
251
252
253Temps d'expiration des connexions
254=================================
255
256Il est possible de paramétrer certaines durées d'expiration au niveau
257des connexions TCP. Trois temps indépendants sont configurables et
258acceptent des valeurs en millisecondes. Si l'une de ces trois
259temporisations est dépassée, la session est terminée à chaque
260extrémité.
261
262 - temps d'attente d'une donnée de la part du client, ou de la
263 possibilité de lui envoyer des données : "clitimeout" :
264
265 # time-out client à 2mn30.
266 clitimeout 150000
267
268 - temps d'attente d'une donnée de la part du serveur, ou de la
269 possibilité de lui envoyer des données : "srvtimeout" :
270
271 # time-out client à 30s.
272 srvtimeout 30000
273
274 - temps d'attente de l'établissement d'une connexion vers un serveur
275 "contimeout" :
276
277 # on abandonne si la connexion n'est pas établie après 3 secondes
278 contimeout 3000
279
280Remarque: "contimeout" et "srvtimeout" n'ont pas d'utilité dans le cas
281du serveur de type "health".
282
283Tentatives de reconnexion
284=========================
285
286Lors d'un échec de connexion vers un serveur, il est possible de
287retenter (potentiellement vers un autre serveur, en cas de répartition
288de charge). Le nombre de nouvelles tentatives infructueuses avant
289abandon est fourni par le paramètre "retries" :
290
291 # on essaie encore trois fois maxi
292 retries 3
293
294Adresse du serveur
295==================
296
297Le serveur vers lequel sont redirigées les connexions est défini par
298le paramètre "dispatch" sous la forme <adresse_ip>:<port> :
299
300 # on envoie toutes les nouvelles connexions ici
301 dispatch 192.168.1.2:80
302
303Remarque: ce paramètre n'a pas d'utilité pour un serveur en mode "health".
304
305Définition du nom du cookie
306===========================
307
308En mode HTTP, il est possible de rechercher la valeur d'un cookie pour
309savoir vers quel serveur aiguiller la requête utilisateur. Le nom du
310cookie est donné par le paramètre "cookie" :
311
312 listen http_proxy 0.0.0.0:80
313 mode http
314 cookie SERVERID
315
willy tarreau5cbea6f2005-12-17 12:48:26 +0100316On peut modifier l'utilisation du cookie pour la rendre plus
317intelligente vis-à-vis des applications relayées. Il est possible,notamment
318de supprimer ou réécrire un cookie retourné par un serveur accédé en direct,
319et d'insérer un cookie dans une réponse HTTP orientée vers un serveur
320sélectionné en répartition de charge.
321
322Pour ne conserver le cookie qu'en accès indirect, donc à travers le
323dispatcheur, et le supprimer lors des accès directs :
324
325 cookie SERVERID indirect
326
327Pour réécrire le nom du serveur dans un cookie lors d'un accès direct :
328
329 cookie SERVERID rewrite
330
331Pour créer un cookie comportant le nom du serveur lors d'un accès en
332répartition de charge interne. Dans ce cas, il est indispensable que tous les
333serveurs aient un cookie renseigné.
334
335 cookie SERVERID insert
336
337Remarque: Il est possible de combiner 'insert' avec 'indirect' ou 'rewrite'
338pour s'adapter à des applications générant déjà le cookie, avec un contenu
339invalide. Il suffit pour cela de les spécifier sur la même ligne.
willy tarreau0f7af912005-12-17 12:21:26 +0100340
341Assignation d'un serveur à une valeur de cookie
342===============================================
343
344En mode HTTP, il est possible d'associer des serveurs à des valeurs de
345cookie par le paramètre "server". La syntaxe est :
346
willy tarreau5cbea6f2005-12-17 12:48:26 +0100347 server <identifiant> <adresse_ip>:<port> cookie <valeur>
willy tarreau0f7af912005-12-17 12:21:26 +0100348
willy tarreau5cbea6f2005-12-17 12:48:26 +0100349<identifiant> est un nom quelconque de serveur utilisé pour
350l'identifier dans la configuration (erreurs...).
willy tarreau0f7af912005-12-17 12:21:26 +0100351<adresse_ip>:<port> le couple adresse-port sur lequel le serveur écoute.
willy tarreau5cbea6f2005-12-17 12:48:26 +0100352<valeur> est la valeur trouvée dans le cookie,
willy tarreau0f7af912005-12-17 12:21:26 +0100353
354Exemple : le cookie SERVERID peut contenir server01 ou server02
355-------
356 listen http_proxy 0.0.0.0:80
357 mode http
358 cookie SERVERID
359 dispatch 192.168.1.100:80
willy tarreau5cbea6f2005-12-17 12:48:26 +0100360 server web1 192.168.1.1:80 cookie server01
361 server web2 192.168.1.2:80 cookie server02
362
363Attention : la syntaxe a changé depuis la version 1.0.
364---------
365
366Répartiteur de charge interne
367=============================
368
369Le relais peut effectuer lui-même la répartition de charge entre les
370différents serveurs décrits pour un service donné, en mode TCP comme
371en mode HTTP. Pour cela, on précise le mot clé 'balance' dans la
372définition du service, éventuellement suivi du nom d'un algorithme de
373répartition. En version 1.1.0, seul 'roundrobin' est géré, et c'est
374aussi la valeur implicite par défaut. Il est évident qu'en cas
375d'utilisation du répartiteur interne, il ne faudra pas spécifier
376d'adresse de dispatch, et qu'il faudra au moins un serveur.
377
378Exemple : même que précédemment en répartition interne
379-------
380
381 listen http_proxy 0.0.0.0:80
382 mode http
383 cookie SERVERID
384 balance roundrobin
385 server web1 192.168.1.1:80 cookie server01
386 server web2 192.168.1.2:80 cookie server02
387
willy tarreau0f7af912005-12-17 12:21:26 +0100388
willy tarreau5cbea6f2005-12-17 12:48:26 +0100389Surveillance des serveurs
390=========================
willy tarreau0f7af912005-12-17 12:21:26 +0100391
willy tarreau5cbea6f2005-12-17 12:48:26 +0100392A cette date, l'état des serveurs n'est testé que par établissement
393de connexion TCP toutes les 2 secondes, avec 3 essais pour déclarer
394un serveur en panne, 2 pour le déclarer utilisable. Un serveur hors
395d'usage ne sera pas utilisé dans le processus de répartition de charge
396interne. Pour activer la surveillance, ajouter le mot clé 'check' à la
willy tarreaue47c8d72005-12-17 12:55:52 +0100397fin de la déclaration du serveur. Il est possible de spécifier
398l'intervalle (en millisecondes) séparant deux tests du serveur par le
399paramètre "inter", le nombre d'échecs acceptés par le paramètre "fall",
400et le nombre de succès avant reprise par le paramètre "rise".
401Les paramètres non précisés prennent les valeurs suivantes par défaut :
402 - inter : 2000
403 - rise : 2
404 - fall : 3
willy tarreau5cbea6f2005-12-17 12:48:26 +0100405
406Exemple : même que précédemment avec surveillance
407-------
408
409 listen http_proxy 0.0.0.0:80
410 mode http
411 cookie SERVERID
412 balance roundrobin
413 server web1 192.168.1.1:80 cookie server01 check
414 server web2 192.168.1.2:80 cookie server02 check
415
416
417Reconnexion vers un répartiteur en cas d'échec direct
418=====================================================
willy tarreau0f7af912005-12-17 12:21:26 +0100419
420En mode HTTP, si un serveur défini par un cookie ne répond plus, les
421clients seront définitivement aiguillés dessus à cause de leur cookie,
422et de ce fait, définitivement privés de service. La spécification du
willy tarreau5cbea6f2005-12-17 12:48:26 +0100423paramètre "redispatch" autorise dans ce cas à renvoyer les connexions
424échouées vers le répartiteur (externe ou interne) afin d'assigner un
willy tarreau0f7af912005-12-17 12:21:26 +0100425nouveau serveur à ces clients.
426
427Exemple :
428-------
429 listen http_proxy 0.0.0.0:80
430 mode http
431 cookie SERVERID
432 dispatch 192.168.1.100:80
willy tarreau5cbea6f2005-12-17 12:48:26 +0100433 server web1 192.168.1.1:80 cookie server01
434 server web2 192.168.1.2:80 cookie server02
435 redispatch # renvoyer vers dispatch si serveur HS.
436
437Fonctionnement en mode transparent
438==================================
439
440En mode HTTP, le mot clé "transparent" permet d'intercepter des
441sessions routées à travers la machine hébergeant le proxy. Dans
442ce mode, on ne précise pas l'adresse de répartition "dispatch",
443car celle-ci est tirée de l'adresse destination de la session
444détournée. Le système doit permettre de rediriger les paquets
445vers un processus local.
446
447Exemple :
448-------
449 listen http_proxy 0.0.0.0:65000
450 mode http
451 transparent
452 cookie SERVERID
willy tarreau0f7af912005-12-17 12:21:26 +0100453 server server01 192.168.1.1:80
454 server server02 192.168.1.2:80
willy tarreau5cbea6f2005-12-17 12:48:26 +0100455
456 # iptables -t nat -A PREROUTING -i eth0 -p tcp -d 192.168.1.100 \
457 --dport 80 -j REDIRECT --to-ports 65000
willy tarreau0f7af912005-12-17 12:21:26 +0100458
459Journalisation des connexions
460=============================
461
462Les connexions TCP et HTTP peuvent donner lieu à une journalisation
463sommaire indiquant, pour chaque connexion, la date, l'heure, les adresses
464IP source et destination, et les ports source et destination qui la
465caractérisent. Ultérieurement, les URLs seront loguées en mode HTTP,
466tout comme les arrêts de service. Tous les messages sont envoyés en
467syslog vers un ou deux serveurs. La syntaxe est la suivante :
468
469 log <adresse_ip> <facility>
470
471Exemple :
472---------
473 listen http_proxy 0.0.0.0:80
474 mode http
475 log 192.168.2.200 local3
476 log 192.168.2.201 local4
477
478Les connexions sont envoyées en niveau "info". Les démarrages de
479service seront envoyés en "notice", les signaux d'arrêts en "warning"
willy tarreau535ae7a2005-12-17 12:58:00 +0100480et les arrêts définitifs en "alert". Ceci est valable aussi bien
481pour les proxies que pour les serveurs testés au sein des proxies.
willy tarreau0f7af912005-12-17 12:21:26 +0100482
483Les catégories possibles sont :
484 kern, user, mail, daemon, auth, syslog, lpr, news,
485 uucp, cron, auth2, ftp, ntp, audit, alert, cron2,
486 local0, local1, local2, local3, local4, local5, local6, local7
487
488
willy tarreau5cbea6f2005-12-17 12:48:26 +0100489Modification des entêtes HTTP
490=============================
willy tarreau0f7af912005-12-17 12:21:26 +0100491
492En mode HTTP uniquement, il est possible de remplacer certains entêtes
willy tarreau5cbea6f2005-12-17 12:48:26 +0100493dans la requête et/ou la réponse à partir d'expressions régulières. Une
494limitation cependant : les entêtes fournis au milieu de connexions
495persistentes (keep-alive) ne sont pas vus. Les données ne sont pas
496affectées, ceci ne s'applique qu'aux entêtes.
willy tarreau0f7af912005-12-17 12:21:26 +0100497
498La syntaxe est :
willy tarreau5cbea6f2005-12-17 12:48:26 +0100499 reqadd <string> pour ajouter un entête dans la requête
500 reqrep <search> <replace> pour modifier la requête
501 reqrep <search> pour supprimer un entête dans la requête
502
503 rspadd <string> pour ajouter un entête dans la réponse
504 rsprep <search> <replace> pour modifier la réponse
505 rsprep <search> pour supprimer un entête dans la réponse
506
willy tarreau0f7af912005-12-17 12:21:26 +0100507
508<search> est une expression régulière compatible GNU regexp supportant
509le groupage par parenthèses (sans les '\'). Les espaces et autres
510séparateurs doivent êtres précédés d'un '\' pour ne pas être confondus
willy tarreau5cbea6f2005-12-17 12:48:26 +0100511avec la fin de la chaîne. De plus, certains caractères spéciaux peuvent
512être précédés d'un backslach ('\') :
513
514 \t pour une tabulation
515 \r pour un retour charriot
516 \n pour un saut de ligne
517 \ pour différencier un espace d'un séparateur
518 \# pour différencier un dièse d'un commentaire
519 \\ pour un backslash
520 \xXX pour un caractère spécifique XX (comme en C)
willy tarreau0f7af912005-12-17 12:21:26 +0100521
willy tarreau0f7af912005-12-17 12:21:26 +0100522
willy tarreau5cbea6f2005-12-17 12:48:26 +0100523<replace> contient la chaîne remplaçant la portion vérifiée par l'expression.
524Elle peut inclure les caractères spéciaux ci-dessus, faire référence à un
525groupe délimité par des parenthèses dans l'expression régulière, par sa
526position numérale. Les positions vont de 1 à 9, et sont codées par un '\'
527suivi du chiffre désiré. Il est également possible d'insérer un caractère non
528imprimable (utile pour le saut de ligne) inscrivant '\x' suivi du code
529hexadécimal de ce caractère (comme en C).
530
531<string> représente une chaîne qui sera ajoutée systématiquement après la
532dernière ligne d'entête.
533
534Remarques :
535---------
536 - la première ligne de la requête et celle de la réponse sont traitées comme
537 des entêtes, ce qui permet de réécrire des URL et des codes d'erreur.
538 - 'reqrep' est l'équivalent de 'cliexp' en version 1.0, et 'rsprep' celui de
539 'srvexp'. Ces noms sont toujours supportés mais déconseillés.
540 - pour des raisons de performances, le nombre total de caractères ajoutés sur
willy tarreau535ae7a2005-12-17 12:58:00 +0100541 une requête ou une réponse est limité à 4096 depuis la version 1.1.5 (cette
542 limite était à 256 auparavant). Cette valeur est modifiable dans le code.
543 Pour un usage temporaire, on peut gagner de la place en supprimant quelques
544 entêtes inutiles avant les ajouts.
willy tarreau0f7af912005-12-17 12:21:26 +0100545
546Exemples :
willy tarreau5cbea6f2005-12-17 12:48:26 +0100547--------
548 reqrep ^(GET.*)(.free.fr)(.*) \1.online.fr\3
549 reqrep ^(POST.*)(.free.fr)(.*) \1.online.fr\3
550 reqrep ^Proxy-Connection:.* Proxy-Connection:\ close
551 rsprep ^Server:.* Server:\ Tux-2.0
552 rsprep ^(Location:\ )([^:]*://[^/]*)(.*) \1\3
553 rspdel ^Connection:.*
554 rspadd Connection:\ close
willy tarreau0f7af912005-12-17 12:21:26 +0100555
556
willy tarreau5cbea6f2005-12-17 12:48:26 +0100557Répartition avec persistence
558============================
559
560La combinaison de l'insertion de cookie avec la répartition de charge interne
561permet d'assurer une persistence dans les sessions HTTP d'une manière
562pratiquement transparente pour les applications. Le principe est simple :
563 - assigner un cookie à chaque serveur
564 - effectuer une répartition interne
565 - insérer un cookie dans les réponses issues d'une répartition
566
567Exemple :
568-------
569 listen application 0.0.0.0:80
570 mode http
571 cookie SERVERID insert indirect
572 balance roundrobin
573 server 192.168.1.1:80 cookie server01 check
574 server 192.168.1.2:80 cookie server02 check
575
willy tarreaub719f002005-12-17 12:55:07 +0100576=======================
577| Paramétrage système |
578=======================
willy tarreau0f7af912005-12-17 12:21:26 +0100579
580Sous Linux 2.4
581==============
582
willy tarreaub719f002005-12-17 12:55:07 +0100583-- cut here --
584#!/bin/sh
585# set this to about 256/4M (16384 for 256M machine)
586MAXFILES=16384
587echo $MAXFILES > /proc/sys/fs/file-max
588ulimit -n $MAXFILES
589
590if [ -e /proc/sys/net/ipv4/ip_conntrack_max ]; then
591 echo 65536 > /proc/sys/net/ipv4/ip_conntrack_max
592fi
593
594if [ -e /proc/sys/net/ipv4/netfilter/ip_ct_tcp_timeout_fin_wait ]; then
595 # 30 seconds for fin, 15 for time wait
596 echo 3000 > /proc/sys/net/ipv4/netfilter/ip_ct_tcp_timeout_fin_wait
597 echo 1500 > /proc/sys/net/ipv4/netfilter/ip_ct_tcp_timeout_time_wait
598 echo 0 > /proc/sys/net/ipv4/netfilter/ip_ct_tcp_log_invalid_scale
599 echo 0 > /proc/sys/net/ipv4/netfilter/ip_ct_tcp_log_out_of_window
600fi
601
willy tarreau0f7af912005-12-17 12:21:26 +0100602echo 1024 60999 > /proc/sys/net/ipv4/ip_local_port_range
willy tarreau5cbea6f2005-12-17 12:48:26 +0100603echo 32768 > /proc/sys/net/ipv4/ip_queue_maxlen
willy tarreaub719f002005-12-17 12:55:07 +0100604echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
605echo 4096 > /proc/sys/net/ipv4/tcp_max_syn_backlog
willy tarreau0f7af912005-12-17 12:21:26 +0100606echo 262144 > /proc/sys/net/ipv4/tcp_max_tw_buckets
willy tarreaub719f002005-12-17 12:55:07 +0100607echo 262144 > /proc/sys/net/ipv4/tcp_max_orphans
608echo 300 > /proc/sys/net/ipv4/tcp_keepalive_time
willy tarreau0f7af912005-12-17 12:21:26 +0100609echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle
610echo 0 > /proc/sys/net/ipv4/tcp_timestamps
willy tarreau5cbea6f2005-12-17 12:48:26 +0100611echo 0 > /proc/sys/net/ipv4/tcp_ecn
willy tarreaub719f002005-12-17 12:55:07 +0100612echo 0 > /proc/sys/net/ipv4/tcp_sack
613echo 0 > /proc/sys/net/ipv4/tcp_dsack
614
615# auto-tuned on 2.4
616#echo 262143 > /proc/sys/net/core/rmem_max
617#echo 262143 > /proc/sys/net/core/rmem_default
618
619echo 16384 65536 524288 > /proc/sys/net/ipv4/tcp_rmem
620echo 16384 349520 699040 > /proc/sys/net/ipv4/tcp_wmem
621
622-- cut here --
willy tarreau0f7af912005-12-17 12:21:26 +0100623
624-- fin --