NGINX:强制nginx使用所有工作程序进行负载平衡

时间:2019-08-14 12:00:04

标签: nginx lua

我正在使用nginx,需要测试是否所有工作程序都正确共享数据,但是目前只有一个工作程序正在处理所有请求。

我的worker_process设置为4,但是仍然有一个工作人员正在处理所有请求。

我可以通过将worker_connections的数量更改为非常低的值并在while循环中使用curl命令将垃圾邮件nginx强制为包括其他工作程序。也许max_conns可以工作,但是我正在使用nginx的免费版本。

是否有更实际的方法来迫使nginx使用不同的工作程序?

我当前的设置是这个。任何帮助,将不胜感激。

worker_processes  4;

events {
    worker_connections  5;
    multi_accept off;
    use        epoll;
}

server {
     listen       8081;
     server_name *.localhost;

     # max_conns = 3;

     set $upstreamserver "127.0.0.7:8080

    location =/worker {
        content_by_lua '
            ngx.say(ngx.worker.id())
            ngx.say(ngx.var.pid)
            ngx.say(ngx.worker.count())
        ';
    }

    location /basic_status {
        stub_status;
    }

    location / {        
            proxy_buffering             off;
            proxy_redirect              off;
        proxy_pass                  http://upstreamserver;
    }

1 个答案:

答案 0 :(得分:1)

您似乎遇到了epoll的限制,而不是nginx或Lua。 This article详细解释了正在发生的事情。

如果您确实希望在各个工作人员之间更均匀地分配负载,则以上文章建议在reuseport指令(docs)上使用listen选项。

server {
     listen       8081 reuseport;
     ...
}

尽管在某些极端情况下延迟可能会增加,但这并不是所有情况下的最佳选择。