Flux TCP proxy (MySQL et Redis) avec Nginx

J’ai lu sur Nginx Fabric Model et j’attire mon attention sur la reconfiguration de la manière dont une application communique avec MySQL et Redis. Si l’instance locale de Nginx peut proxy le trafic HTTP de manière efficace et rapide, elle peut désormais également proxy TCP sans se soucier du réseau, même en utilisant l’esclave de firebase database en tant que maître en cas d’urgence et potentiellement encapsuler le partitionnement. Tous les avantages peuvent simplifier la configuration des applications et sa logique, le réseau (encombrement, latence, délais d’attente, tentatives) ne sera plus au centre du développement des fonctionnalités.

J’utilise le dernier Docker et l’ensemble de conteneurs: Nginx , Redis , MySQL . J’ai essayé la configuration suivante:

user nginx; worker_processes 1; error_log /var/log/nginx/error.log info; pid /var/run/nginx.pid; events { worker_connections 1024; } stream { upstream redis { # prefer first server but limit connections server 172.17.0.8:6379 weight=2 max_conns=1; server 172.17.0.3:6379; } upstream mysql { # use second server in case of failure server 172.17.0.4:3306; server 172.17.0.5:3306 backup; } server { listen 6379 so_keepalive=on; proxy_pass redis; } server { listen 3306 so_keepalive=on; proxy_pass mysql; } } 

J’ai quelques questions:

La dernière question est très importante, j’ai trouvé les modules ngx_stream_map_module et ngx_stream_split_clients_module mais $ remote_addr ne convient pas au sharding, pouvons-nous intercepter les cookies à partir de la section http et les réutiliser dans la section stream sans en-tête? Peut-on injecter du code Lua dans la section stream? Ngx_stream_ssl_preread_module est- il une solution à ce problème, comment le faire fonctionner pour la connexion sans cryptage?