blob: ae120a1e8c5a799c53e9f8d1a22f1ce7d5f1546d [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 - implement "track XXX.YYY" for each server as an alternative to
178 health checks. This will automatically set the server state to
179 the same as server YYY of proxy XXX.
180 - balance on URI hash (specify length or depth)
181 - balance on any header hash (eg: host)
182 - balance with redirections to real servers
183 - multi-site LB with weighted redirections to the remote one
Willy Tarreau58f10d72006-12-04 02:26:12 +0100184