代理TCPstream(MySQL和Redis)与Nginx

我阅读了关于Nginx结构模型的内容 ,它将我的注意力转移到重新configuration应用程序如何与MySQL和Redis进行通信。 如果本地的Nginx实例可以高效快速地代理HTTPstream量,那么现在它也可以代理TCP而不用担心networking,甚至在紧急情况下使用数据库从服务器作为主服务器,并可能封装数据库分片。 所有的好处都可以简化应用程序configuration,而且它的逻辑,networking(拥塞,延迟,超时,重试)将不再是function开发的焦点。

我使用最新的Docker和一组容器: Nginx , Redis , MySQL 。 我尝试了以下configuration:

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; } } 

我有一些疑问:

最后一个问题是非常重要的,我发现ngx_stream_map_module和ngx_stream_split_clients_module模块,但$ remote_addr不适合分片,我们可以拦截来自HTTP部分的cookie, 并重用在我们没有任何头的stream部分? 我们可以在stream部分注入Lua代码吗? 是ngx_stream_ssl_preread_module这个问题的解决scheme,如何使它无需encryption连接工作?