* released 1.1.10

* if a cookie is used in insert+indirect mode, it's desirable that the
  the servers don't see it. It was not possible to remove it correctly
  with regexps, so now it's removed automatically.
This commit is contained in:
willy tarreau 2005-12-17 13:11:56 +01:00
parent c29948c439
commit 96d4037194
4 changed files with 26 additions and 21 deletions

10
NOTES
View File

@ -16,12 +16,6 @@
- differentiate http headers and http uris - differentiate http headers and http uris
- support environment variables in config file - support environment variables in config file
- support keep-alive - support keep-alive
1.1.9 -> 1.1.10
--- Notes about cookie usage --- - automatically remove client cookie in insert+indirect mode
Cookie insertion is done at the end of server response.
Cookie matching is done after header replacement, but before
header deletion. This means that it's perfectly possible to
delete an inserted cookie once it has been matched, so that
the server never knows about it.

View File

@ -1,9 +1,9 @@
H A - P r o x y H A - P r o x y
--------------- ---------------
version 1.1.9 version 1.1.10
willy tarreau willy tarreau
2002/05/02 2002/05/10
================ ================
| Introduction | | Introduction |
@ -455,12 +455,14 @@ serveurs aient un cookie renseign
cookie SERVERID insert cookie SERVERID insert
Remarque : Remarques :
---------- -----------
Il est possible de combiner 'insert' avec 'indirect' ou 'rewrite' pour s'adapter - Il est possible de combiner 'insert' avec 'indirect' ou 'rewrite' pour s'adapter
à des applications générant déjà le cookie, avec un contenu invalide. Il suffit à des applications générant déjà le cookie, avec un contenu invalide. Il suffit
pour cela de les spécifier sur la même ligne. pour cela de les spécifier sur la même ligne.
- dans le cas où 'insert' et 'indirect' sont spécifiés, le cookie n'est jamais
transmis au serveur vu qu'il n'en a pas connaissance et ne pourrait pas le
comprendre.
2.9) Assignation d'un serveur à une valeur de cookie 2.9) Assignation d'un serveur à une valeur de cookie
---------------------------------------------------- ----------------------------------------------------
@ -533,7 +535,8 @@ Exemples :
server web1 192.168.1.1:80 cookie server01 check server web1 192.168.1.1:80 cookie server01 check
server web2 192.168.1.2:80 cookie server02 check inter 500 rise 1 fall 2 server web2 192.168.1.2:80 cookie server02 check inter 500 rise 1 fall 2
# insertion automatique de cookie dans la réponse du serveur # Insertion automatique de cookie dans la réponse du serveur, et suppression
# automatique dans la requête.
listen web_appl 0.0.0.0:80 listen web_appl 0.0.0.0:80
mode http mode http
cookie SERVERID insert indirect cookie SERVERID insert indirect
@ -728,9 +731,9 @@ Exemples :
La combinaison de l'insertion de cookie avec la répartition de charge interne La combinaison de l'insertion de cookie avec la répartition de charge interne
permet d'assurer une persistence dans les sessions HTTP d'une manière permet d'assurer une persistence dans les sessions HTTP d'une manière
pratiquement transparente pour les applications. Le principe est simple : pratiquement transparente pour les applications. Le principe est simple :
- assigner un cookie à chaque serveur - attribuer une valeur d'un cookie à chaque serveur
- effectuer une répartition interne - effectuer une répartition interne
- insérer un cookie dans les réponses issues d'une répartition - insérer un cookie dans les réponses issues d'une répartition uniquement
- cacher ce cookie à l'application - cacher ce cookie à l'application
Exemple : Exemple :
@ -741,7 +744,6 @@ Exemple :
balance roundrobin balance roundrobin
server 192.168.1.1:80 cookie server01 check server 192.168.1.1:80 cookie server01 check
server 192.168.1.2:80 cookie server02 check server 192.168.1.2:80 cookie server02 check
reqidel ^Cookie:\ SERVERID=
======================= =======================
| Paramétrage système | | Paramétrage système |

View File

@ -62,7 +62,7 @@ listen proxy1 0.0.0.0:8000
option httplog option httplog
option dontlognull option dontlognull
# reqirep ^(Test:\ ) \0_toto_\1_toto # reqirep ^(Test:\ ) \0_toto_\1_toto
# reqidel ^Cookie:\ SERVERID= # reqidel ^X-Forwarded-for:
# reqirep ^(GET|POST)\ .* \0 # reqirep ^(GET|POST)\ .* \0
# reqirep ^(Host:|Connection:|User-agent:|Cookie:)\ .* \0 # reqirep ^(Host:|Connection:|User-agent:|Cookie:)\ .* \0
# reqideny ^ # reqideny ^

View File

@ -17,6 +17,10 @@
* *
* ChangeLog : * ChangeLog :
* *
* 2002/05/10 : 1.1.10
* - if a cookie is used in insert+indirect mode, it's desirable that the
* the servers don't see it. It was not possible to remove it correctly
* with regexps, so now it's removed automatically.
* 2002/04/19 : 1.1.9 * 2002/04/19 : 1.1.9
* - don't use snprintf()'s return value as an end of message since it may * - don't use snprintf()'s return value as an end of message since it may
* be larger. This caused bus errors and segfaults in internal libc's * be larger. This caused bus errors and segfaults in internal libc's
@ -2300,6 +2304,11 @@ int process_cli(struct session *t) {
if (srv) { /* we found the server */ if (srv) { /* we found the server */
t->flags |= SN_DIRECT; t->flags |= SN_DIRECT;
t->srv = srv; t->srv = srv;
/* if this cookie was set in insert+indirect mode, then it's better that the
* server never sees it.
*/
if ((t->proxy->options & (PR_O_COOK_INS | PR_O_COOK_IND)) == (PR_O_COOK_INS | PR_O_COOK_IND))
delete_header = 1;
} }
break; break;