如何使用 nginx 和 Gunicorn 设置负载平衡?

Chr*_*ris 5 django configuration load-balancing nginx gunicorn

我使用 nginx、Gunicorn 和 Ubuntu 14.04 设置了一个 Django 服务器。现在,我需要启用 nginx 作为负载均衡器。但是,我在网络上找不到与此相关的任何内容,并且我不清楚如何在 nginx 上启用负载平衡,而 gunicorn 作为我的上游块的一部分。

根据nginx 文档,负载平衡至少需要以下基本设置:

http {
    upstream myapp1 {
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://myapp1;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

此设置清晰易懂。我的 gunicorn 配置如下所示,其中包含对 gunicorn.sock 文件的引用。

http {
    upstream myapp1 {
        server unix:/home/myapp/run/stage/gunicorn.sock fail_timeout=0;
    } 
    server {
        listen 80;

        location / {
            if (!-f $request_filename) {
                proxy_pass http://myapp1;
                break;
            } 
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您能帮助我解决以下问题,那就太好了:

  1. 以下上游块是否正确以在此设置中启用负载平衡?

  2. 或者:我是否必须引用其他服务器上的 .sock 文件而不是使用例如 srv2.example.com

  3. 我是否必须向所有服务器或仅向一台服务器添加类似的块?

    upstream myapp1 {
        server server unix:/home/myapp/run/stage/gunicorn.sock fail_timeout=0;
        server srv2.example.com;
        server srv3.example.com;
    } 
    
    Run Code Online (Sandbox Code Playgroud)

希望有人以前做过这个。

谢谢你,克里斯