Nginx > Varnish > Gunicorn 错误 重定向过多

Nginx > Varnish > Gunicorn 错误 重定向过多

我有以下配置:

Nginx > Varnish > Gunicorn > Django

我想用 Varnish 缓存同一个网站(移动版和网络版)的 2 个版本。

Gunicorn:

WEB: gunicorn_django --bind 127.0.0.1:8181

MOBILE: gunicorn_django --bind 127.0.0.1:8182

Nginx的:

网站:

server {
        listen 80;
        server_name www.mysite.com;

        location / { 
                proxy_pass http://127.0.0.1:8282;   # pass to Varnish
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}

移动的:

server {
        listen 80;
        server_name m.mysite.com;

        location / { 
                proxy_pass http://127.0.0.1:8282;   # pass to Varnish
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}

清漆: default.vcl

backend mobile_mysite {
    .host = "127.0.0.1";
    .port = "8182";
}

backend mysite {
    .host = "127.0.0.1";
    .port = "8181";
} 

sub vcl_recv {
    if (req.http.host  ~ "^m.mysite.com$") {
        set req.http.host = "m.mysite.com";
        set req.backend = mobile_mysite;
    }elsif (req.http.host  ~ "^(www.)?mysite.com$") {
        set req.http.host = "mysite.com";
        set req.backend = mysite;
    }
    if (req.url ~ ".*/static") {
        /* do not cache static content */
        return (pass);
    }
}

VARNISH 命令:

/usr/local/sbin/varnishd -P /var/run/varnish.pid -a 127.0.0.1:8282 -f /etc/varnish/default.vcl -T 127.0.0.1:6082 -t 120 -w 50,1000,120 -u varnish -g varnish

问题:

在 Nginx 上,如果我使用 Varnish(端口 8282)设置移动版本,并使用 Gunicorn(端口 8181)设置 WEB 版本,则 MOBILE 会被 varnish 缓存,WEB 和 MOBILE 都可以工作,但 WEB 不会被缓存。如果我将 WEB 版本的 proxy_pass 设置为 Varnish(端口 8282)并重新启动 Nginx,则在访问 Web 版本(www.mysite.com)时会收到错误“重定向过多”。

我认为我的问题来自 Varnish 配置文件,因为如果我将 Nginx proxy_pass 设置为 Gunicorn 端口(移动和网络),网站就能正常运行。

相关内容