* 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
- support environment variables in config file
- support keep-alive
--- Notes about cookie usage ---
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.
1.1.9 -> 1.1.10
- automatically remove client cookie in insert+indirect mode

View File

@ -1,9 +1,9 @@
H A - P r o x y
---------------
version 1.1.9
version 1.1.10
willy tarreau
2002/05/02
2002/05/10
================
| Introduction |
@ -455,12 +455,14 @@ serveurs aient un cookie renseign
cookie SERVERID insert
Remarque :
----------
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
pour cela de les spécifier sur la même ligne.
Remarques :
-----------
- 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
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
----------------------------------------------------
@ -533,7 +535,8 @@ Exemples :
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
# 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
mode http
cookie SERVERID insert indirect
@ -728,9 +731,9 @@ Exemples :
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
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
- 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
Exemple :
@ -741,7 +744,6 @@ Exemple :
balance roundrobin
server 192.168.1.1:80 cookie server01 check
server 192.168.1.2:80 cookie server02 check
reqidel ^Cookie:\ SERVERID=
=======================
| Paramétrage système |

View File

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

View File

@ -17,6 +17,10 @@
*
* 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
* - 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
@ -2300,6 +2304,11 @@ int process_cli(struct session *t) {
if (srv) { /* we found the server */
t->flags |= SN_DIRECT;
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;