У меня такой конфиг:
Nginx> Varnish> Gunicorn> Django
Я хочу кэшировать 2 версии одного и того же сайта (мобильная и веб-версия) с помощью Varnish.
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) и разрешаю WEB-версию с Gunicorn (порт 8181), MOBILE кэшируется с помощью varnish, и WEB, и MOBILE работают, но WEB не кэшируется. Если я установил proxy_pass веб-версии на Varnish (порт 8282) и перезапустил Nginx, я получил сообщение об ошибке при доступе к веб-версии (www.mysite.com) «Слишком много перенаправлений».
Я думаю, что моя проблема связана с файлом конфигурации Varnish, так как сайт работает хорошо, если я настроил Nginx proxy_pass на порты Gunicorn (МОБИЛЬНЫЙ И ВЕБ).