blob: 74b3ccefd50b764edd0d89ce98d9637eb1a6d911 [file] [log] [blame]
willy tarreau9fe663a2005-12-17 13:02:59 +01001* x-forwarded-for
2* implémenter l'option "log global" au niveau proxy pour utiliser les logs
3 globaux.
4* matching case-insensitive
willy tarreaua1598082005-12-17 13:08:06 +01005* implémenter outgoing addr
6* loguer t_cnx, t_data, t_total
willy tarreau9fe663a2005-12-17 13:02:59 +01007+ factoriser la fonction de log (send_log = send_syslog+warning+alert)
8+ désactivation du keep-alive (suppression des ^Connection: et ajout des Connection: close)
9 -> 4 lignes (2 del, 2 add) suffisent.
willy tarreaua1598082005-12-17 13:08:06 +010010+ ne pas loguer certaines adresses IP sources
11 -> pour les health-checks uniquement -> pas de log pour les requêtes
12 vides (option dontlognull)
willy tarreau9fe663a2005-12-17 13:02:59 +010013- mesurer le tps consommé entre deux select, et fournir la conso CPU :
14 %cpu = 100 * (tpreselect(n+1)-tpostselect(n)) / (tpreselect(n+1)-tpreselect(n))
willy tarreau01a73eb2005-12-18 01:34:05 +010015* implémenter limitation fd dans la conf : setrlimit(RLIMIT_NOFILE, ...)
willy tarreau9fe663a2005-12-17 13:02:59 +010016- implémenter core/no-core dans la conf : setrlimit(RLIMIT_CORE, ...)
willy tarreau9fe663a2005-12-17 13:02:59 +010017- optimiser les regex pour accélérer les matches :
18 - compter les matches
19 - si match(n) & ([n].cpt > [n-1].cpt) & ([n].action == [n-1].action), swap(n,n-1)
20 - régulièrement, diviser tous les compteurs (lors d'un dépassement par exemple)
willy tarreau240afa62005-12-17 13:14:35 +010021- filtrage sur l'adresse IP source, et stocker le pointeur sur la dernière regex
22 matchée dans la "session" pour accélérer les regex.
willy tarreau9fe663a2005-12-17 13:02:59 +010023- gestion keep-alive
willy tarreau240afa62005-12-17 13:14:35 +010024
willy tarreaubc4e1fb2005-12-17 13:32:07 +010025+ handle parametrable HTTP health-checks replies
willy tarreau240afa62005-12-17 13:14:35 +010026- differentiate http headers and http uris
27- support environment variables in config file
28- support keep-alive
willy tarreau906b2682005-12-17 13:49:52 +010029- support SSL
willy tarreaua41a8b42005-12-17 14:02:24 +010030
31===================== demandes ==========================
32ok> 1) écoute sur une plage de ports :
33ok> listen XXX 1.2.3.4:21000-21060
34ok>
35ok> 2) écoutes multiples :
36ok> listen XXX 1.2.3.4:21000
37ok> bind 2.3.4.5:21001
38ok> bind 2.3.4.5:21000-21060
39ok>
40ok> => on en arrive à ceci :
41ok>
42ok> listen XXX [ address:port ]
43ok> bind addr:plage-port[,[addr:]plage-port]*
44ok> bind ...
45ok> ...
46ok>
47ok> => proxy->listen_fd et proxy->listen_addr doivent être
48ok> mis dans des listes
49ok> => OK pour listen, implémenter le BIND.
50ok>
51ok> 3) reconnexion sur le même port sur le serveur :
52ok>
53ok> server XXX 1.2.3.4[:port]
54ok> si <port> n'est pas spécifié, on utilise le même port que celui qui a reçu
55ok> la connexion. Dans ce cas, il faut pouvoir forcer le port du health-check
56ok> par un nouveau parametre "port".
57ok>
58ok> => ça permet les forwardings de plages :
59ok>
60ok> listen XXX
61ok> bind 1.2.3.4:10000-11000
62ok> server 1.2.3.5
63ok>
644) paramètres par défaut :
65 créer une section "defaults" qui précise les paramètres par défaut pour les
66 sections suivantes, concernant les paramètres suivants :
67 ok- les logs
68 ok- les modes (tcp/http)
69 ok- le balancing (round-robin/source)
70 ok- les time-outs
71 ok- maxconn
72 ok- redisp
73 ok- les options
74 ok- le retry
75 ok- les checks
willy tarreaueedaa9f2005-12-17 14:08:03 +010076 ok- les cookies/captures
willy tarreaua41a8b42005-12-17 14:02:24 +010077 - les options des serveurs ?
78 - les filtres et regex ?
willy tarreaua41a8b42005-12-17 14:02:24 +010079
willy tarreau91b76212006-04-10 20:34:25 +020080* implémenter "balance source" pour faire un hash sur la source.
willy tarreaueedaa9f2005-12-17 14:08:03 +010081 permettre de spécifier un masque sur lequel s'applique le hachage,
82 ainsi qu'une option pour hacher en fonction de l'adresse dans le
willy tarreaudd07e972005-12-18 00:48:48 +010083 champ "x-forwarded-for". Problème pour le support des pannes: ce
84 type de hash est utile là où la persistence par cookie ne peut pas
85 s'appliquer, donc comment faire pour assurer un maximum de persistence
86 en cas de panne ?
willy tarreaua41a8b42005-12-17 14:02:24 +010087
886) possibilité d'un process séparé par listen :
89 listen XXX
90 fork [ group_id ]
91
willy tarreaudd07e972005-12-18 00:48:48 +010092 le fait de spécifier group_id fera que toutes les instances utilisant le
93 même identifiant de groupe seront gérées par un même processus.
willy tarreaua41a8b42005-12-17 14:02:24 +010094
willy tarreaueedaa9f2005-12-17 14:08:03 +010095 -> plus souple et plus compréhensible de faire des sections par processus,
willy tarreaudd07e972005-12-18 00:48:48 +010096 ce qui résoud également le cas ci-dessous. Ex:
97 process_group X
98 nbproc X
99 uid X
100 chroot X
101 listen ...
willy tarreaueedaa9f2005-12-17 14:08:03 +0100102
willy tarreaua41a8b42005-12-17 14:02:24 +01001037) gérer un chroot/uid/gid différents par process :
104 listen XXX
105 chroot /truc
106 uid 123
107 gid 456
108
1098) beaucoup de paramètres pourraient être spécifiques aux serveurs et non
110 aux instances. Exemples :
willy tarreau01a73eb2005-12-18 01:34:05 +0100111 * adresse IP source pour atteindre le serveur
112 - méthode de health-check (proto, ...)
113 * méthode de health-check (port)
willy tarreaua41a8b42005-12-17 14:02:24 +0100114 - poids
115 - alerte en cas de disparition
116 - le nombre max de sessions à lui envoyer
117
willy tarreaueedaa9f2005-12-17 14:08:03 +0100118ok> 9) ajouter des paramètres optionnels à l'option "httpchk" permettant
119ok> de forcer la méthode, la version HTTP et des headers.
120ok> ex: option httpchk -> OPTIONS / HTTP/1.0
121ok> option httpchk /test -> OPTIONS /test HTTP/1.0
122ok> option httpchk HEAD / HTTP/1.0\nHost:\ www -> tel quel
willy tarreaudd07e972005-12-18 00:48:48 +0100123
124Todo for 1.1
125============
126* "no more server" alert
127* config check
128- anti-flapping
129
130Todo for 1.2
131============
132- direct <server> <regex> <match>
133- new config syntax allowing braces to be able to shorten lines
134- insert/learn/check/log unique request ID, and add the ability
135 to block bad responses.
136- IPv6 :
137* listen [ip4.ip4.ip4.ip4]:port[-port]
138* listen [ip6::...ip6]/port[-port]
139- server xxx ipv4 | ipv4: | ipv4:port[-port] | ipv6/ | ipv6/port[-port]
willy tarreau12350152005-12-18 01:03:27 +0100140* appcookie
willy tarreau91b76212006-04-10 20:34:25 +0200141* weighted round robin
willy tarreau4302f492005-12-18 01:00:37 +0100142- option to shutdown(listen_sock) when max connections reached
willy tarreauad90a0c2005-12-18 01:09:15 +0100143* epoll
willy tarreau8cef8a92006-05-02 23:45:50 +0200144- replace the event scheduler with an O(log(N)) one. The timer queue will
145 need a tree with a known end (to speed up queueing of latest events), and
146 no entry for eternity.
willy tarreau64a3cc32005-12-18 01:13:11 +0100147- refine memory management so that the request buffer is only allocated in
148 cli_read() and response buffer during srv_read(). This would protect against
149 attacks with thousands connections : 20000 connections consume 340 MB RSS and
150 1.3 GB VSZ on Linux. Data should be in a separate buffer to prevent any
151 activity on the buffer's pointers from touching the buffer page itself.
152- make buffer size configurable in global options
willy tarreau01a73eb2005-12-18 01:34:05 +0100153* monitor number of simultaneous sessions in logs (per srv/inst/global)
willy tarreau43b15122006-04-10 21:01:39 +0200154* ignore leading empty lines in HTTP requests
willy tarreau8cef8a92006-05-02 23:45:50 +0200155+ limit the per-server number of sessions and queue incoming connections
156 => still needs refinement (actions at servers UP/DOWN, timeouts)
157- new 'timeout' keyword to set all timeouts (including the queue)
158- ability to intercept an URI to report statistics
159- ability to intercept an URI to return 404
160- embedded error pages loaded in memory at startup time (eg: for expired time
161 in connection queue)
willy tarreau01a73eb2005-12-18 01:34:05 +0100162
Willy Tarreaubaaee002006-06-26 02:48:02 +0200163
164TODO for 1.3
165============
166 - check all copyrights
Willy Tarreaubaaee002006-06-26 02:48:02 +0200167 - fix Makefile.bsd
168 - separate inline functions to put them in files covered by GPL
Willy Tarreau58f10d72006-12-04 02:26:12 +0100169 - implement HTTP status 414 - request URI too long
Willy Tarreau5fc49f22006-12-17 23:32:53 +0100170 - implement 'use_filters <proxy>' and 'use_backend <proxy>'
171 - fix the logs. The logs might be defined from the frontend and
172 augmented depending on the backends' options. Another solution
173 would be to support a 'log' type entity just like the frontend,
174 filters and backend, on which every entity could rely.
175 - implement 'on uri <uri> <proxy>', 'on host <host> <proxy>'
176 - remove the first now useless hop in hdr_idx
Willy Tarreaubb046ac2007-03-03 19:17:03 +0100177 - balance on URI hash (specify length or depth)
178 - balance on any header hash (eg: host)
179 - balance with redirections to real servers
180 - multi-site LB with weighted redirections to the remote one
Willy Tarreau58f10d72006-12-04 02:26:12 +0100181