作者回复: 两步: 1、使用proxy_bind来绑定source ip,由于指令值支持变量故可以实现多网卡。例如proxy_bind $mylocalip; 2、为实现第1步中的变量,需要你定一个规则。例如根据客户端IP做一次选择映射,(注意,upstream_addr变量不能使用,因为做proxy_bind时还未生成此变量),此时可以用split_client模块定义新变量,而新变量值为虚拟网卡IP,例如: split_clients "${remote_addr}" $mylocalip { 50% "127.0.0.1:49001"; * "127.0.0.1:49002"; }
作者回复: 信息太少
作者回复: 你是说多台上游服务以同一个域名配置在nginx上吗? DNS协议不影响四层负载均衡,唯一需要注意的是nginx为提升性能会缓存域名与IP,可通过配置适合的超时时间来让nginx定期更新缓存。
作者回复: 可以
作者回复: 1、http能匹配server_name的原因是,Nginx必须按HTTP协议来处理协议,及它很明确接收到的是request,发送的是response,而request的格式RFC规范中定义的很清楚; 2、stream处理的是TCP协议,它不应该假定处理的是HTTP协议,否则我们大可使用HTTP即可。 3、stream可以处理TLS协议,而TLS协议里有extension中含有域名,可以通过变量取到这个域名。 这三个协议的特性可以参考我的课程《Web协议详解与抓包实战》
作者回复: 可以
作者回复: 获取本地地址可以使用server_addr变量,详见第74课
作者回复: 目前没有nginx模块获取frame信息并以变量的方式提供! 这门课程不介绍如何开发nginx模块,它需要C语言功底及linux系统知识,门槛较高。如果确实需要了解,可以看《深入理解Nginx:模块开发与架构解析》一书。 当然,还有一个方案是用openresty,从lua socket对象中获取frame信息。建议阅读完第六部分课程再看。
作者回复: 变量在openresty中,要用ngx.var.passURL 而不是ngx.passURL