作者回复: 你是说upstream模块顺序吗?顺序是对的,模块顺序其实针对的是初始化顺序,而初始化什么呢?就是upstream模块构成的单链表(参见http filter模块),由于是从链表头插入并初始化新模块,往往执行顺序与初始化顺序是相反的。
作者回复: 1、我的示例中,只开启了1个worker进程。 2、没使用zone,则会在内存中会记录访问了1次或者2次,所以功能是正常的。 3、如果开启了多个worker进程,但没有开启zone,那么多个worker是独立的在各自内存中记录,不能分享其他worker进程的访问记录。
作者回复: 可以,比如用if加rewrite指令,或者用map来为proxy_pass提供域名
作者回复: upstream模块与handler和filter模块并不一样,因为同一个upstream{}里只能使用1种负载均衡算法。唯有keepalive和zone是协同起作用的,其他算法模块都是排它的
作者回复: 你好羁绊12221,官网上下载的Nginx,自带了很多模块,有些不是默认安装的,有些则是默认安装的,比如upstream就是默认安装的。怎么区别它们呢?用configure --help,里面写着--with的,都是默认不安装的,而写着--without-则是默认安装的模块。 另外,nginx第三方模块,一般都放在github上,你可以搜索nginx module
作者回复: 有,但非常低,它使用自旋锁对共享内存做同步,每次操作红黑树不过十来条指令,可以忽略。
作者回复: 你说的调用链,是指处理模块和过滤模块吧?这两类模块与upstream模块不同,upstream模块间其实差异性很大,比如zone模块功能完全不同,而keepalive模块应在负载均衡算法模块之前,而其他负载均衡算法模块(如hash或者least conn)互相之间有排他性。所以upstream模块的处理方式不是简单的链表关系。我建议你参考一下这两个方法:ngx_http_upstream_keepalive和ngx_http_upstream_zone
作者回复: 是的
作者回复: master不选择worker,由linux kernal选择worker,参见122课
作者回复: 只能我来猜了。保持会话,你这里是指,同一客户端2次请求2个连接,都落在一台服务器上?如果是这个问题,答案是不行。