| * x-forwarded-for |
| * implémenter l'option "log global" au niveau proxy pour utiliser les logs |
| globaux. |
| * matching case-insensitive |
| * implémenter outgoing addr |
| * loguer t_cnx, t_data, t_total |
| + factoriser la fonction de log (send_log = send_syslog+warning+alert) |
| + désactivation du keep-alive (suppression des ^Connection: et ajout des Connection: close) |
| -> 4 lignes (2 del, 2 add) suffisent. |
| + ne pas loguer certaines adresses IP sources |
| -> pour les health-checks uniquement -> pas de log pour les requêtes |
| vides (option dontlognull) |
| - mesurer le tps consommé entre deux select, et fournir la conso CPU : |
| %cpu = 100 * (tpreselect(n+1)-tpostselect(n)) / (tpreselect(n+1)-tpreselect(n)) |
| - implémenter limitation fd dans la conf : setrlimit(RLIMIT_NOFILE, ...) |
| - implémenter core/no-core dans la conf : setrlimit(RLIMIT_CORE, ...) |
| - optimiser les regex pour accélérer les matches : |
| - compter les matches |
| - si match(n) & ([n].cpt > [n-1].cpt) & ([n].action == [n-1].action), swap(n,n-1) |
| - régulièrement, diviser tous les compteurs (lors d'un dépassement par exemple) |
| - filtrage sur l'adresse IP source, et stocker le pointeur sur la dernière regex |
| matchée dans la "session" pour accélérer les regex. |
| - gestion keep-alive |
| |
| + handle parametrable HTTP health-checks replies |
| - differentiate http headers and http uris |
| - support environment variables in config file |
| - support keep-alive |
| - support SSL |
| |
| ===================== demandes ========================== |
| ok> 1) écoute sur une plage de ports : |
| ok> listen XXX 1.2.3.4:21000-21060 |
| ok> |
| ok> 2) écoutes multiples : |
| ok> listen XXX 1.2.3.4:21000 |
| ok> bind 2.3.4.5:21001 |
| ok> bind 2.3.4.5:21000-21060 |
| ok> |
| ok> => on en arrive à ceci : |
| ok> |
| ok> listen XXX [ address:port ] |
| ok> bind addr:plage-port[,[addr:]plage-port]* |
| ok> bind ... |
| ok> ... |
| ok> |
| ok> => proxy->listen_fd et proxy->listen_addr doivent être |
| ok> mis dans des listes |
| ok> => OK pour listen, implémenter le BIND. |
| ok> |
| ok> 3) reconnexion sur le même port sur le serveur : |
| ok> |
| ok> server XXX 1.2.3.4[:port] |
| ok> si <port> n'est pas spécifié, on utilise le même port que celui qui a reçu |
| ok> la connexion. Dans ce cas, il faut pouvoir forcer le port du health-check |
| ok> par un nouveau parametre "port". |
| ok> |
| ok> => ça permet les forwardings de plages : |
| ok> |
| ok> listen XXX |
| ok> bind 1.2.3.4:10000-11000 |
| ok> server 1.2.3.5 |
| ok> |
| 4) paramètres par défaut : |
| créer une section "defaults" qui précise les paramètres par défaut pour les |
| sections suivantes, concernant les paramètres suivants : |
| ok- les logs |
| ok- les modes (tcp/http) |
| ok- le balancing (round-robin/source) |
| ok- les time-outs |
| ok- maxconn |
| ok- redisp |
| ok- les options |
| ok- le retry |
| ok- les checks |
| - les options des serveurs ? |
| - les filtres et regex ? |
| - les cookies/captures |
| |
| 5) implémenter "balance source" pour faire un hash sur la source. |
| |
| 6) possibilité d'un process séparé par listen : |
| listen XXX |
| fork [ group_id ] |
| |
| le fait de spécifier group_id fera que toutes les instances utilisant le même |
| identifiant de groupe seront gérées par un même processus. |
| |
| 7) gérer un chroot/uid/gid différents par process : |
| listen XXX |
| chroot /truc |
| uid 123 |
| gid 456 |
| |
| 8) beaucoup de paramètres pourraient être spécifiques aux serveurs et non |
| aux instances. Exemples : |
| - adresse IP source pour atteindre le serveur |
| - méthode de health-check (proto, port, ...) |
| - poids |
| - alerte en cas de disparition |
| - le nombre max de sessions à lui envoyer |
| |