Назад | Перейти на главную страницу

Сервер Varnish перед сервером nginx с несколькими виртуальными хостами

Я попытался найти решение для этого, но не могу найти никакой документации / советов по моей конкретной настройке.

Моя установка:

Backendserver: ngnix: 2 разных веб-сайта (2 основных домена) в virtualenv, под управлением gunicorn / python / django Backendserver hardware (VPS) 2gb ram, 8 CPU

Сервер базы данных: postgresql - pg_bouncer
Аппаратное обеспечение Backendserver (VPS) 1 ГБ оперативной памяти, 8 ЦП

Varnishserver: только текущий лак
Оборудование Varnishserver (VPS) 1 ГБ оперативной памяти, 8 ЦП

Я пытаюсь настроить лаковый сервер для обработки редких всплесков трафика (20 000 уникальных запросов в секунду). Всплеск происходит, когда телепрограмма упоминает один из сайтов.

Что мне нужно сделать, чтобы сервер Varnish кэшировал оба сайта / домена на моем backendserver?

Мой /etc/varnish/default.vcl:

backend django_backend {
    .host = "local.backendserver.com";
    .port = "8080";
}

Мой /usr/local/nginx/site-avaible/domain1.com

upstream gunicorn_domain1 {
    server unix:/home/<USER>/.virtualenvs/<DOMAIN1>/<APP1>/run/gunicorn.sock fail_timeout=0;

}

server {
    listen 80;
    listen 8080;
        server_name domain1.com;
        rewrite ^ http://www.domains.com$request_uri? permanent;
}

server {
    listen 80 default_server;
    listen 8080;

    client_max_body_size 4G;
    server_name  www.domain1.com;

    keepalive_timeout 5;

    # path for static files
    root /home/<USER>/<APP>-media/;

    location / {
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_redirect off;

      if (!-f $request_filename) {
        proxy_pass http://gunicorn_domain1;
        break;
      }
    }

}

Мой /usr/local/nginx/site-avaible/domain2.com

upstream gunicorn_domain2 {
    server unix:/home/<USER>/.virtualenvs/<DOMAIN2>/<APP2>/run/gunicorn.sock fail_timeout=0;

}

server {
    listen 80;
    listen 8080;
        server_name domain2.com;
        rewrite ^ http://www.domains.com$request_uri? permanent;
}

server {
    listen 80;
    listen 8080;

    client_max_body_size 4G;
    server_name  www.domain2.com;

    keepalive_timeout 5;

    # path for static files
    root /home/<USER>/<APP>-media/;

    location / {
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_redirect off;

      if (!-f $request_filename) {
        proxy_pass http://gunicorn_domain2;
        break;
      }
    }

}

Прямо сейчас, если я попробую использовать IP-адрес сервера varnishserver, я получу только домен domain1.com. Будет ли все правильно, если я изменю DNS двух доменов так, чтобы они указывали на varnishserver, или требуется дополнительная настройка, прежде чем это сработает?

Вопрос 2: Нужен ли мне выделенный сервер для varnish, или я могу просто установить varnish на свой backendserver, или на сервере быстро закончится память?