mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-01-10 16:00:08 +00:00
[DOC] imported lots of internal documentations
Those documentations provide nothing to users nor contributors but at least now I know where they are.
This commit is contained in:
parent
1ba6a73594
commit
d1142aa073
27
doc/design-thoughts/backends-v0.txt
Normal file
27
doc/design-thoughts/backends-v0.txt
Normal file
@ -0,0 +1,27 @@
|
||||
1 type générique "entité", avec les attributs suivants :
|
||||
|
||||
- frontend *f
|
||||
- l7switch *s
|
||||
- backend *b
|
||||
|
||||
des types spécifiques sont simplement des entités avec certains
|
||||
de ces champs remplis et pas forcément tous :
|
||||
|
||||
listen = f [s] b
|
||||
frontend = f [s]
|
||||
l7switch = s
|
||||
backend = [s] b
|
||||
|
||||
Ensuite, les traitements sont évalués dans l'ordre :
|
||||
- listen -> s'il a des règles de l7, on les évalue, et potentiellement on branche vers d'autres listen, l7 ou back, ou on travaille avec le back local.
|
||||
- frontend -> s'il a des règles de l7, on les évalue, et potentiellement on branche vers d'autres listen, l7 ou back
|
||||
- l7switch -> on évalue ses règles, potentiellement on branche vers d'autres listen, l7 ou backends
|
||||
- backend -> s'il a des règles l7, on les évalue (quitte à changer encore de backend) puis on traite.
|
||||
|
||||
Les requêtes sont traitées dans l'ordre des chaînages f->s*->b, et les réponses doivent être
|
||||
traitées dans l'ordre inverse b->s*->f. Penser aux réécritures de champs Host à l'aller et
|
||||
Location en retour.
|
||||
|
||||
D'autre part, prévoir des "profils" plutôt que des blocs de nouveaux paramètres par défaut.
|
||||
Ca permettra d'avoir plein de jeux de paramètres par défaut à utiliser dans chacun de ces
|
||||
types.
|
74
doc/design-thoughts/be-fe-changes.txt
Normal file
74
doc/design-thoughts/be-fe-changes.txt
Normal file
@ -0,0 +1,74 @@
|
||||
- PR_O_TRANSP => FE !!! devra peut-être changer vu que c'est un complément du mode dispatch.
|
||||
- PR_O_NULLNOLOG => FE
|
||||
- PR_O_HTTP_CLOSE => FE. !!! mettre BE aussi !!!
|
||||
- PR_O_TCP_CLI_KA => FE
|
||||
|
||||
- PR_O_FWDFOR => BE. FE aussi ?
|
||||
- PR_O_FORCE_CLO => BE
|
||||
- PR_O_PERSIST => BE
|
||||
- PR_O_COOK_RW, PR_O_COOK_INS, PR_O_COOK_PFX, PR_O_COOK_POST => BE
|
||||
- PR_O_COOK_NOC, PR_O_COOK_IND => BE
|
||||
- PR_O_ABRT_CLOSE => BE
|
||||
- PR_O_REDISP => BE
|
||||
- PR_O_BALANCE, PR_O_BALANCE_RR, PR_O_BALANCE_SH => BE
|
||||
- PR_O_CHK_CACHE => BE
|
||||
- PR_O_TCP_SRV_KA => BE
|
||||
- PR_O_BIND_SRC => BE
|
||||
- PR_O_TPXY_MASK => BE
|
||||
|
||||
|
||||
- PR_MODE_TCP : BE côté serveur, FE côté client
|
||||
|
||||
- nbconn -> fe->nbconn, be->nbconn.
|
||||
Pb: rendre impossible le fait que (fe == be) avant de faire ça,
|
||||
sinon on va compter les connexions en double. Ce ne sera possible
|
||||
que lorsque les FE et BE seront des entités distinctes. On va donc
|
||||
commencer par laisser uniquement fe->nbconn (vu que le fe ne change
|
||||
pas), et modifier ceci plus tard, ne serait-ce que pour prendre en
|
||||
compte correctement les minconn/maxconn.
|
||||
=> solution : avoir beconn et feconn dans chaque proxy.
|
||||
|
||||
- failed_conns, failed_secu (réponses bloquées), failed_resp... : be
|
||||
Attention: voir les cas de ERR_SRVCL, il semble que parfois on
|
||||
indique ça alors qu'il y a un write error côté client (ex: ligne
|
||||
2044 dans proto_http).
|
||||
|
||||
=> be et pas be->beprm
|
||||
|
||||
- logs du backup : ->be (idem)
|
||||
|
||||
- queue : be
|
||||
|
||||
- logs/debug : srv toujours associé à be (ex: proxy->id:srv->id). Rien
|
||||
pour le client pour le moment. D'une manière générale, les erreurs
|
||||
provoquées côté serveur vont sur BE et celles côté client vont sur
|
||||
FE.
|
||||
- logswait & LW_BYTES : FE (puisqu'on veut savoir si on logue tout de suite)
|
||||
|
||||
- messages d'erreurs personnalisés (errmsg, ...) -> fe
|
||||
|
||||
- monitor_uri -> fe
|
||||
- uri_auth -> (fe->firpm puis be->fiprm). Utilisation de ->be
|
||||
|
||||
- req_add, req_exp => fe->fiprm, puis be->fiprm
|
||||
- req_cap, rsp_cap -> fe->fiprm
|
||||
- rsp_add, rsp_exp => be->fiprm, devrait être fait ensuite aussi sur fe->fiprm
|
||||
- capture_name, capture_namelen : fe->fiprm
|
||||
|
||||
Ce n'est pas la solution idéale, mais au moins la capture et configurable
|
||||
par les filtres du FE et ne bouge pas lorsque le BE est réassigné. Cela
|
||||
résoud aussi un pb d'allocation mémoire.
|
||||
|
||||
|
||||
- persistance (appsessions, cookiename, ...) -> be
|
||||
- stats:scope "." = fe (celui par lequel on arrive)
|
||||
!!!ERREUR!!! => utiliser be pour avoir celui qui a été validé par
|
||||
l'uri_auth.
|
||||
|
||||
|
||||
--------- corrections à effectuer ---------
|
||||
|
||||
- remplacement de headers : parser le header et éventuellement le supprimer puis le(les) rajouter.
|
||||
- session->proto.{l4state,l7state,l7substate} pour CLI et SRV
|
||||
- errorloc : si définie dans backend, la prendre, sinon dans front.
|
||||
- logs : faire be sinon fe.
|
117
doc/design-thoughts/config-language.txt
Normal file
117
doc/design-thoughts/config-language.txt
Normal file
@ -0,0 +1,117 @@
|
||||
Prévoir des commandes en plusieurs mots clés.
|
||||
Par exemple :
|
||||
|
||||
timeout connection XXX
|
||||
connection scale XXX
|
||||
|
||||
On doit aussi accepter les préfixes :
|
||||
|
||||
tim co XXX
|
||||
co sca XXX
|
||||
|
||||
Prévoir de ranger les combinaisons dans un tableau. On doit même
|
||||
pouvoir effectuer un mapping simplifiant le parseur.
|
||||
|
||||
|
||||
Pour les filtres :
|
||||
|
||||
|
||||
<direction> <where> <what> <operator> <pattern> <action> [ <args>* ]
|
||||
|
||||
<direction> = [ req | rsp ]
|
||||
<where> = [ in | out ]
|
||||
<what> = [ line | LINE | METH | URI | h(hdr) | H(hdr) | c(cookie) | C(cookie) ]
|
||||
<operator> = [ == | =~ | =* | =^ | =/ | != | !~ | !* | !^ | !/ ]
|
||||
<pattern> = "<string>"
|
||||
<action> = [ allow | permit | deny | delete | replace | switch | add | set | redir ]
|
||||
<args> = optionnal action args
|
||||
|
||||
exemples:
|
||||
|
||||
req in URI =^ "/images" switch images
|
||||
req in h(host) =* ".mydomain.com" switch mydomain
|
||||
req in h(host) =~ "localhost(.*)" replace "www\1"
|
||||
|
||||
alternative :
|
||||
|
||||
<direction> <where> <action> [not] <what> [<operator> <pattern> [ <args>* ]]
|
||||
|
||||
req in switch URI =^ "/images" images
|
||||
req in switch h(host) =* ".mydomain.com" mydomain
|
||||
req in replace h(host) =~ "localhost(.*)" "www\1"
|
||||
req in delete h(Connection)
|
||||
req in deny not line =~ "((GET|HEAD|POST|OPTIONS) /)|(OPTIONS *)"
|
||||
req out set h(Connection) "close"
|
||||
req out add line "Server: truc"
|
||||
|
||||
|
||||
<direction> <action> <where> [not] <what> [<operator> <pattern> [ <args>* ]] ';' <action2> <what2>
|
||||
|
||||
req in switch URI =^ "/images/" images ; replace "/"
|
||||
req in switch h(host) =* ".mydomain.com" mydomain
|
||||
req in replace h(host) =~ "localhost(.*)" "www\1"
|
||||
req in delete h(Connection)
|
||||
req in deny not line =~ "((GET|HEAD|POST|OPTIONS) /)|(OPTIONS *)"
|
||||
req out set h(Connection) "close"
|
||||
req out add line == "Server: truc"
|
||||
|
||||
|
||||
Extension avec des ACL :
|
||||
|
||||
req in acl(meth_valid) METH =~ "(GET|POST|HEAD|OPTIONS)"
|
||||
req in acl(meth_options) METH == "OPTIONS"
|
||||
req in acl(uri_slash) URI =^ "/"
|
||||
req in acl(uri_star) URI == "*"
|
||||
|
||||
req in deny acl !(meth_options && uri_star || meth_valid && uri_slash)
|
||||
|
||||
Peut-être plus simplement :
|
||||
|
||||
acl meth_valid METH =~ "(GET|POST|HEAD|OPTIONS)"
|
||||
acl meth_options METH == "OPTIONS"
|
||||
acl uri_slash URI =^ "/"
|
||||
acl uri_star URI == "*"
|
||||
|
||||
req in deny not acl(meth_options uri_star, meth_valid uri_slash)
|
||||
|
||||
req in switch URI =^ "/images/" images ; replace "/"
|
||||
req in switch h(host) =* ".mydomain.com" mydomain
|
||||
req in replace h(host) =~ "localhost(.*)" "www\1"
|
||||
req in delete h(Connection)
|
||||
req in deny not line =~ "((GET|HEAD|POST|OPTIONS) /)|(OPTIONS *)"
|
||||
req out set h(Connection) "close"
|
||||
req out add line == "Server: truc"
|
||||
|
||||
Prévoir le cas du "if" pour exécuter plusieurs actions :
|
||||
|
||||
req in if URI =^ "/images/" then replace "/" ; switch images
|
||||
|
||||
Utiliser les noms en majuscules/minuscules pour indiquer si on veut prendre
|
||||
en compte la casse ou non :
|
||||
|
||||
if uri =^ "/watch/" setbe watch rebase "/watch/" "/"
|
||||
if uri =* ".jpg" setbe images
|
||||
if uri =~ ".*dll.*" deny
|
||||
if HOST =* ".mydomain.com" setbe mydomain
|
||||
etc...
|
||||
|
||||
Another solution would be to have a dedicated keyword to URI remapping. It
|
||||
would both rewrite the URI and optionally switch to another backend.
|
||||
|
||||
uriremap "/watch/" "/" watch
|
||||
uriremap "/chat/" "/" chat
|
||||
uriremap "/event/" "/event/" event
|
||||
|
||||
Or better :
|
||||
|
||||
uriremap "/watch/" watch "/"
|
||||
uriremap "/chat/" chat "/"
|
||||
uriremap "/event/" event
|
||||
|
||||
For the URI, using a regex is sometimes useful (eg: providing a set of possible prefixes.
|
||||
|
||||
|
||||
Sinon, peut-être que le "switch" peut prendre un paramètre de mapping pour la partie matchée :
|
||||
|
||||
req in switch URI =^ "/images/" images:"/"
|
||||
|
101
doc/design-thoughts/cttproxy-changes.txt
Normal file
101
doc/design-thoughts/cttproxy-changes.txt
Normal file
@ -0,0 +1,101 @@
|
||||
Nécessite CAP_NET_ADMIN (12)
|
||||
On peut donc aussi mettre CAP_NET_BIND_SERVICE (10) pour autoriser les ports < 1024
|
||||
|
||||
|
||||
charger le module :
|
||||
# modprobe ip_conntrack hashsize=65536
|
||||
# modprobe iptable_tproxy hashsize=65536
|
||||
# echo 15 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_time_wait
|
||||
# echo 30 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_fin_wait
|
||||
|
||||
|
||||
Si on utilise "usesrc client", alors on rencontre ce problème en cas
|
||||
de réutilisation d'un port :
|
||||
|
||||
# dmesg
|
||||
IP_TPROXY: error applying NAT mapping, hooknum=4 0103000a:e5a2 -> 05000001:d204
|
||||
IP_TPROXY: error applying NAT mapping, hooknum=4 0103000a:e5a2 -> 05000001:d204
|
||||
|
||||
Solution retenue pour la configuration :
|
||||
|
||||
You have to write "usesrc XXXX" on the "source" line. "XXXX" is either
|
||||
an IP address or the keyword "clientip" to reuse the client's IP with
|
||||
a dynamically allocated port, or "client" to reuse both the client's IP
|
||||
and port (dangerous). But due to the way cttproxy works, the source address
|
||||
is mandatory. Eg:
|
||||
|
||||
backend static
|
||||
source 192.168.1.254 usesrc clientip
|
||||
server static1 192.168.1.10 source 192.168.1.254 usesrc clientip
|
||||
|
||||
|
||||
---- Anciennes réflexions ----
|
||||
|
||||
Il faudrait donc peut-être toujours avoir un port dynamique, ou bien
|
||||
traiter le TIME_WAIT correctement en appliquant natdel => corrige pratiquement
|
||||
toujours le problème (mais réduire les timeouts semble important)
|
||||
|
||||
|
||||
source 10.1.2.3 present 10.2.3.4
|
||||
source 10.1.2.3 present same_ip
|
||||
source 10.1.2.3 present same
|
||||
source 10.1.2.3:5000 present same
|
||||
|
||||
source 10.1.2.3 appear_as 10.2.3.4
|
||||
source 10.1.2.3 appear_as same_ip
|
||||
source 10.1.2.3 appear_as same
|
||||
source 10.1.2.3:5000 appear_as same
|
||||
|
||||
source 10.1.2.3 {keepsrc | keepip | usesrc 1.2.3.4}
|
||||
|
||||
source 10.1.2.3 snat { client | clientip | 1.2.3.4 }
|
||||
source 10.1.2.3 extbind same
|
||||
source 10.1.2.3 intercept same
|
||||
source 10.1.2.3 spoof same
|
||||
source 10.1.2.3 showsrc same
|
||||
source 10.1.2.3 usesrc same
|
||||
source 10.1.2.3 setsrc same
|
||||
source 10.1.2.3 withsrc same
|
||||
source 10.1.2.3 usesrc clientip:sameport
|
||||
source 10.1.2.3 alias same
|
||||
source 10.1.2.3 as same
|
||||
source 10.1.2.3 outgoing same
|
||||
source 10.1.2.3 public same
|
||||
source 10.1.2.3:5000 pretend same
|
||||
|
||||
source 10.1.2.3=same
|
||||
source 10.1.2.3=10.2.3.4
|
||||
|
||||
source 10.1.2.3^same
|
||||
source 10.1.2.3^10.2.3.4
|
||||
|
||||
source 10.1.2.3@same
|
||||
source 10.1.2.3@10.2.3.4
|
||||
|
||||
source 10.1.2.3!same
|
||||
source 10.1.2.3!10.2.3.4
|
||||
|
||||
source 10.1.2.3|same
|
||||
source 10.1.2.3|10.2.3.4
|
||||
|
||||
source 10.1.2.3(same)
|
||||
source 10.1.2.3(10.2.3.4)
|
||||
|
||||
source 10.1.2.3~same
|
||||
source 10.1.2.3~10.2.3.4
|
||||
|
||||
A l'inverse, si "source" contient l'adresse vue :
|
||||
|
||||
source same bindto 1.2.3.4
|
||||
source 2.3.4.5 bindto 1.2.3.4
|
||||
|
||||
Problème: si "bindto" est oublié, le bind sur 2.3.4.5 ne fonctionnera pas.
|
||||
|
||||
Pour l'adresse de listen (avec "bind"), il serait bien que l'adresse
|
||||
translatée apparaisse au même niveau que l'IP afin que les plages et
|
||||
listes continuent de fonctionner par association.
|
||||
|
||||
Différences entre source et bind :
|
||||
- source: 1 seule IP source, éventuellement un port, plus tard une plage
|
||||
- bind : liste de (IP source facultatives, port obligatoire, parfois une plage)
|
||||
|
13
doc/design-thoughts/sess_par_sec.txt
Normal file
13
doc/design-thoughts/sess_par_sec.txt
Normal file
@ -0,0 +1,13 @@
|
||||
Graphe des nombres de traitements par seconde unité de temps avec
|
||||
- un algo linéaire et très peu coûteux unitairement (0.01 ut)
|
||||
- un algo en log(2) et 5 fois plus coûteux (0.05 ut)
|
||||
|
||||
set yrange [0:1]
|
||||
plot [0:1000] 1/(1+0.01*x), 1/(1+0.05*log(x+1)/log(2))
|
||||
|
||||
Graphe de la latence induite par ces traitements en unités de temps :
|
||||
|
||||
set yrange [0:1000]
|
||||
plot [0:1000] x/(1+0.01*x), x/(1+0.05*log(x+1)/log(2))
|
||||
|
||||
|
44
doc/internals/connection-scale.txt
Normal file
44
doc/internals/connection-scale.txt
Normal file
@ -0,0 +1,44 @@
|
||||
Problème des connexions simultanées avec un backend
|
||||
|
||||
Pour chaque serveur, 3 cas possibles :
|
||||
|
||||
- pas de limite (par défaut)
|
||||
- limite statique (maxconn)
|
||||
- limite dynamique (maxconn/(ratio de px->conn), avec minconn)
|
||||
|
||||
On a donc besoin d'une limite sur le proxy dans le cas de la limite
|
||||
dynamique, afin de fixer un seuil et un ratio. Ce qui compte, c'est
|
||||
le point après lequel on passe d'un régime linéaire à un régime
|
||||
saturé.
|
||||
|
||||
On a donc 3 phases :
|
||||
|
||||
- régime minimal (0..srv->minconn)
|
||||
- régime linéaire (srv->minconn..srv->maxconn)
|
||||
- régime saturé (srv->maxconn..)
|
||||
|
||||
Le minconn pourrait aussi ressortir du serveur ?
|
||||
En pratique, on veut :
|
||||
- un max par serveur
|
||||
- un seuil global auquel les serveurs appliquent le max
|
||||
- un seuil minimal en-dessous duquel le nb de conn est
|
||||
maintenu. Cette limite a un sens par serveur (jamais moins de X conns)
|
||||
mais aussi en global (pas la peine de faire du dynamique en dessous de
|
||||
X conns à répartir). La difficulté en global, c'est de savoir comment
|
||||
on calcule le nombre min associé à chaque serveur, vu que c'est un ratio
|
||||
défini à partir du max.
|
||||
|
||||
Ca revient à peu près à la même chose que de faire 2 états :
|
||||
|
||||
- régime linéaire avec un offset (srv->minconn..srv->maxconn)
|
||||
- régime saturé (srv->maxconn..)
|
||||
|
||||
Sauf que dans ce cas, le min et le max sont bien par serveur, et le seuil est
|
||||
global et correspond à la limite de connexions au-delà de laquel on veut
|
||||
tourner à plein régime sur l'ensemble des serveurs. On peut donc parler de
|
||||
passage en mode "full", "saturated", "optimal". On peut également parler de
|
||||
la fin de la partie "scalable", "dynamique".
|
||||
|
||||
=> fullconn 1000 par exemple ?
|
||||
|
||||
|
92
doc/internals/header-parser-speed.txt
Normal file
92
doc/internals/header-parser-speed.txt
Normal file
@ -0,0 +1,92 @@
|
||||
TEST 3:
|
||||
|
||||
printf "GET /\r\nbla: truc\r\n\r\n"
|
||||
|
||||
|
||||
NO SPEEDUP :
|
||||
|
||||
WHL: hdr_st=0x00, hdr_used=1 hdr_tail=0 hdr_last=1, h=0x8071080, lr=0x8071080, r=0x8071094
|
||||
WHL: hdr_st=0x01, hdr_used=1 hdr_tail=0 hdr_last=1, h=0x8071080, lr=0x8071080, r=0x8071094
|
||||
WHL: hdr_st=0x32, hdr_used=1 hdr_tail=0 hdr_last=1, h=0x8071080, lr=0x8071086, r=0x8071094
|
||||
WHL: hdr_st=0x03, hdr_used=2 hdr_tail=1 hdr_last=2, h=0x8071087, lr=0x8071087, r=0x8071094
|
||||
WHL: hdr_st=0x34, hdr_used=2 hdr_tail=1 hdr_last=2, h=0x8071087, lr=0x8071091, r=0x8071094
|
||||
WHL: hdr_st=0x03, hdr_used=3 hdr_tail=2 hdr_last=3, h=0x8071092, lr=0x8071092, r=0x8071094
|
||||
WHL: hdr_st=0x34, hdr_used=3 hdr_tail=2 hdr_last=3, h=0x8071092, lr=0x8071093, r=0x8071094
|
||||
WHL: hdr_st=0x06, hdr_used=3 hdr_tail=2 hdr_last=3, h=0x8071092, lr=0x8071093, r=0x8071094
|
||||
END: hdr_st=0x06, hdr_used=3 hdr_tail=2 hdr_last=3, h=0x8071092, lr=0x8071094, r=0x8071094
|
||||
=> 9 trans
|
||||
|
||||
|
||||
FULL SPEEDUP :
|
||||
|
||||
WHL: hdr_st=0x00, hdr_used=1 hdr_tail=0 hdr_last=1, h=0x806a770, lr=0x806a770, r=0x806a784
|
||||
WHL: hdr_st=0x32, hdr_used=1 hdr_tail=0 hdr_last=1, h=0x806a770, lr=0x806a776, r=0x806a784
|
||||
WHL: hdr_st=0x03, hdr_used=2 hdr_tail=1 hdr_last=2, h=0x806a777, lr=0x806a777, r=0x806a784
|
||||
WHL: hdr_st=0x34, hdr_used=2 hdr_tail=1 hdr_last=2, h=0x806a777, lr=0x806a781, r=0x806a784
|
||||
WHL: hdr_st=0x26, hdr_used=3 hdr_tail=2 hdr_last=3, h=0x806a782, lr=0x806a783, r=0x806a784
|
||||
END: hdr_st=0x06, hdr_used=3 hdr_tail=2 hdr_last=3, h=0x806a782, lr=0x806a784, r=0x806a784
|
||||
=> 6 trans
|
||||
|
||||
|
||||
|
||||
TEST 4:
|
||||
|
||||
|
||||
printf "GET /\nbla: truc\n\n"
|
||||
|
||||
|
||||
NO SPEEDUP :
|
||||
|
||||
WHL: hdr_st=0x00, hdr_used=1 hdr_tail=0 hdr_last=1, h=0x80750d0, lr=0x80750d0, r=0x80750e1
|
||||
WHL: hdr_st=0x01, hdr_used=1 hdr_tail=0 hdr_last=1, h=0x80750d0, lr=0x80750d0, r=0x80750e1
|
||||
WHL: hdr_st=0x02, hdr_used=1 hdr_tail=0 hdr_last=1, h=0x80750d0, lr=0x80750d5, r=0x80750e1
|
||||
WHL: hdr_st=0x03, hdr_used=2 hdr_tail=1 hdr_last=2, h=0x80750d6, lr=0x80750d6, r=0x80750e1
|
||||
WHL: hdr_st=0x04, hdr_used=2 hdr_tail=1 hdr_last=2, h=0x80750d6, lr=0x80750df, r=0x80750e1
|
||||
WHL: hdr_st=0x03, hdr_used=3 hdr_tail=2 hdr_last=3, h=0x80750e0, lr=0x80750e0, r=0x80750e1
|
||||
WHL: hdr_st=0x04, hdr_used=3 hdr_tail=2 hdr_last=3, h=0x80750e0, lr=0x80750e0, r=0x80750e1
|
||||
WHL: hdr_st=0x06, hdr_used=3 hdr_tail=2 hdr_last=3, h=0x80750e0, lr=0x80750e0, r=0x80750e1
|
||||
END: hdr_st=0x06, hdr_used=3 hdr_tail=2 hdr_last=3, h=0x80750e0, lr=0x80750e1, r=0x80750e1
|
||||
=> 9 trans
|
||||
|
||||
|
||||
FULL SPEEDUP :
|
||||
|
||||
WHL: hdr_st=0x00, hdr_used=1 hdr_tail=0 hdr_last=1, h=0x8072010, lr=0x8072010, r=0x8072021
|
||||
WHL: hdr_st=0x03, hdr_used=2 hdr_tail=1 hdr_last=2, h=0x8072016, lr=0x8072016, r=0x8072021
|
||||
END: hdr_st=0x06, hdr_used=3 hdr_tail=2 hdr_last=3, h=0x8072020, lr=0x8072021, r=0x8072021
|
||||
=> 3 trans
|
||||
|
||||
|
||||
TEST 5:
|
||||
|
||||
|
||||
printf "GET /\r\nbla: truc\r\n truc2\r\n\r\n"
|
||||
|
||||
|
||||
NO SPEEDUP :
|
||||
|
||||
WHL: hdr_st=0x00, hdr_used=1 hdr_tail=0 hdr_last=1, h=0x8071080, lr=0x8071080, r=0x807109d
|
||||
WHL: hdr_st=0x01, hdr_used=1 hdr_tail=0 hdr_last=1, h=0x8071080, lr=0x8071080, r=0x807109d
|
||||
WHL: hdr_st=0x32, hdr_used=1 hdr_tail=0 hdr_last=1, h=0x8071080, lr=0x8071086, r=0x807109d
|
||||
WHL: hdr_st=0x03, hdr_used=2 hdr_tail=1 hdr_last=2, h=0x8071087, lr=0x8071087, r=0x807109d
|
||||
WHL: hdr_st=0x34, hdr_used=2 hdr_tail=1 hdr_last=2, h=0x8071087, lr=0x8071091, r=0x807109d
|
||||
WHL: hdr_st=0x05, hdr_used=2 hdr_tail=1 hdr_last=2, h=0x8071087, lr=0x8071092, r=0x807109d
|
||||
WHL: hdr_st=0x03, hdr_used=2 hdr_tail=1 hdr_last=2, h=0x8071087, lr=0x8071094, r=0x807109d
|
||||
WHL: hdr_st=0x34, hdr_used=2 hdr_tail=1 hdr_last=2, h=0x8071087, lr=0x807109a, r=0x807109d
|
||||
WHL: hdr_st=0x03, hdr_used=3 hdr_tail=2 hdr_last=3, h=0x807109b, lr=0x807109b, r=0x807109d
|
||||
WHL: hdr_st=0x34, hdr_used=3 hdr_tail=2 hdr_last=3, h=0x807109b, lr=0x807109c, r=0x807109d
|
||||
WHL: hdr_st=0x06, hdr_used=3 hdr_tail=2 hdr_last=3, h=0x807109b, lr=0x807109c, r=0x807109d
|
||||
END: hdr_st=0x06, hdr_used=3 hdr_tail=2 hdr_last=3, h=0x807109b, lr=0x807109d, r=0x807109d
|
||||
=> 12 trans
|
||||
|
||||
|
||||
FULL SPEEDUP :
|
||||
|
||||
WHL: hdr_st=0x00, hdr_used=1 hdr_tail=0 hdr_last=1, h=0x806dfc0, lr=0x806dfc0, r=0x806dfdd
|
||||
WHL: hdr_st=0x32, hdr_used=1 hdr_tail=0 hdr_last=1, h=0x806dfc0, lr=0x806dfc6, r=0x806dfdd
|
||||
WHL: hdr_st=0x03, hdr_used=2 hdr_tail=1 hdr_last=2, h=0x806dfc7, lr=0x806dfc7, r=0x806dfdd
|
||||
WHL: hdr_st=0x34, hdr_used=2 hdr_tail=1 hdr_last=2, h=0x806dfc7, lr=0x806dfd1, r=0x806dfdd
|
||||
WHL: hdr_st=0x34, hdr_used=2 hdr_tail=1 hdr_last=2, h=0x806dfc7, lr=0x806dfda, r=0x806dfdd
|
||||
WHL: hdr_st=0x26, hdr_used=3 hdr_tail=2 hdr_last=3, h=0x806dfdb, lr=0x806dfdc, r=0x806dfdd
|
||||
END: hdr_st=0x06, hdr_used=3 hdr_tail=2 hdr_last=3, h=0x806dfdb, lr=0x806dfdd, r=0x806dfdd
|
||||
=> 7 trans
|
20
doc/internals/repartition-be-fe-fi.txt
Normal file
20
doc/internals/repartition-be-fe-fi.txt
Normal file
@ -0,0 +1,20 @@
|
||||
- session : ajouter ->fiprm et ->beprm comme raccourcis
|
||||
- px->maxconn: ne s'applique qu'au FE. Pour le BE, on utilise fullconn,
|
||||
initialisé par défaut à la même chose que maxconn.
|
||||
|
||||
|
||||
\ from: proxy session server actuellement
|
||||
field \
|
||||
rules px->fiprm sess->fiprm -
|
||||
srv,cookies px->beprm sess->beprm srv->px
|
||||
options(log) px-> sess->fe -
|
||||
options(fe) px-> sess->fe -
|
||||
options(be) px->beprm sess->beprm srv->px
|
||||
captures px-> sess->fe - ->fiprm
|
||||
|
||||
|
||||
logs px-> sess->fe srv->px
|
||||
errorloc px-> sess->beprm|fe -
|
||||
maxconn px-> sess->fe - ->be
|
||||
fullconn px-> sess->beprm srv->px -
|
||||
|
5
doc/internals/todo.cttproxy
Normal file
5
doc/internals/todo.cttproxy
Normal file
@ -0,0 +1,5 @@
|
||||
- check TPROXY_VERSION if lstchk_tproxy
|
||||
- check capabilities for CAP_NET_ADMIN if lstchk_tproxy
|
||||
- add capabilities support to the global conf (cap_bind_service)
|
||||
- add support for non-local listen address
|
||||
|
Loading…
Reference in New Issue
Block a user