Настройка Varnish на CentOS 7, Nginx и PHP-FPM с SSL

Раньше я не использовал Varnish, но мне нужно установить его на нашем сайте Magento, чтобы ускорить процесс.

Я нашел множество статей о том, как настроить Varnish на Centos 7, PHP-FPM и т. Д., Но ни одна из них не работает с CentOS7, Nginx, PHP-FPM И SSL. Насколько я понимаю, Varnish не работает с SSL, поэтому вам нужно проделать некоторую jiggery-pokery Nginx, чтобы все заработало. Это также сайт Magento с несколькими магазинами, что добавляет еще один уровень сложности.

У кого-нибудь есть информация, чтобы помочь с этим?


person Doyley    schedule 07.02.2019    source источник
comment
Вместо стека NGINX (SSL) - Varnish - NGINX вы можете использовать Hitch для SSL, потому что он может взаимодействовать с Varnish по протоколу PROXY и, таким образом, беспрепятственно доставлять ему IP-адрес клиента.   -  person Danila Vershinin    schedule 08.02.2019


Ответы (1)


Я покажу вам мои собственные файлы конфигурации Nginx, чтобы это работало. Это Debian 9, а не Centos 7, но Nginx должен работать точно так же.

Если у кого-то есть лучшая конфигурация или советы, я внимательно выслушаю ... Я разработчик Magento, а не системный администратор. Мне нужно многое узнать о Nginx и Varnish.

Здесь Varnish прослушивает порт 6081.

  1. Я создал прокси-сервер Varnish для перенаправления запросов HTTPS на лак HTTP. В 1_ :
## HTTPS termination & Varnish proxy
server {

  server_name en.website.com fr.website.com es.website.com de.website.com;

  listen 443 ssl http2;


  access_log /var/www/log/varnish-proxy.log;
  error_log /var/www/log/varnish-proxy.error.log;

  include /etc/nginx/conf/ssl.conf;

  keepalive_timeout 300s;

  location / {
    #BYPASS VARNISH
    #proxy_pass http://127.0.0.1:611;
    #VARNISH ENABLED
    proxy_pass http://127.0.0.1:6081;

    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-Host $http_host;
    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Port 443;
    proxy_set_header X-Secure on;
    proxy_set_header X-Magento-Debug 1;
  }
}

  1. Затем мой vhost в /etc/nginx/sites-available/website.com:
upstream fastcgi_backend { # USE YOUR OWN CONFIG HERE
   # use tcp connection
   # server  127.0.0.1:9000;
   # or socket
   server   unix:/var/run/php7.1-fpm.sock; 
}
map $http_host $MAGE_RUN_CODE_GLOBAL { # USE YOUR OWN CONFIG HERE
    en.website.com en;
    fr.website.com fr;
    es.website.com es;
    de.website.com de;
}

# Redirect to https
server {
  server_name en.website.com fr.website.com es.website.com de.website.com;
  listen 80;

  location ~ /.well-known {
    allow all;
  }

  return 301 https://$http_host$request_uri;
}

# Redirect to https
server {
  server_name _;
  listen 611;

  set $MAGE_ROOT /var/www/magento;
  set $MAGE_MODE developer;
  set $MAGE_RUN_TYPE store;
  set $MAGE_RUN_CODE $MAGE_RUN_CODE_GLOBAL;

  set $HTTPS_FORWARD on;
  set $FPM_USER www-data;

  access_log /var/www/log/website.com.access.log;
  error_log /var/www/log/website.com.error.log error;

  include /var/www/magento/nginx.conf.sample;
}
  1. Включите свои хосты
sudo ln -s /etc/nginx/sites-available/proxy.website.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/website.com /etc/nginx/sites-enabled/
  1. Перезагрузите nginx. -t проверит ваши файлы конфигурации, -s reload перезагрузит конфигурацию Nginx, не прерывая работу службы:
nginx -t && nginx -s reload

РЕДАКТИРОВАТЬ:

  1. Отредактируйте конфигурацию запуска Varnish:

    • CentOS 6: /etc/sysconfig/varnish

    • CentOS 7: /etc/varnish/varnish.params

    • Debian / Ubuntu: /etc/default/varnish

...
## Alternative 2, Configuration with VCL
DAEMON_OPTS="-a :6081 \
             -T localhost:6082 \
             -f /etc/varnish/default.vcl \
             -S /etc/varnish/secret \
             -s malloc,1024m \
             -p workspace_backend=256 \
             -p http_resp_hdr_len=42000"
...
  1. В админке Magento:

    • установите Stores > Configuration > Advanced > System > Full Page Cache > Caching Application на Varnish Cache

    • Теперь нажмите на новый файл «Конфигурация лака».

    • Установите Access list и Backend host на localhost. Я не знаю, какие еще варианты.

    • Сохранить изменения конфигурации

    • Нажмите Export VCL в соответствии с версией вашего Varnish

  2. Загрузите Magento VCL

    • Сделайте резервную копию лака VCL по умолчанию /etc/varnish/default.vcl на /etc/varnish/default.vcl.bkp

    • Поместите magento VCL в новый /etc/varnish/default.vcl файл.

    • Отредактируйте первые строки:

vcl 4.0; import std;

backend default {
    .host = "127.0.0.1";
    .port = "404";
}

backend mywebsite {
    .host = "127.0.0.1";
    .port = "611";
}

acl purge {
    "localhost";
}

sub vcl_recv {

    if (req.http.host ~ "website.com") {
        set req.backend_hint = mywebsite;
    } else {
        set req.backend_hint = default;
    }

...
  1. Иногда вам придется обрабатывать особые случаи, такие как отключение Varnish для некоторых URL-адресов.

    • Перейдите в свой /etc/varnish/default.vcl и отредактируйте его, как вам нужно. Это довольно непонятно, когда вы впервые видите VCL, но, в конце концов, это не так уж и сложно понять.

    • Или отредактируйте свой varnish прокси таким образом:

## HTTPS termination & Varnish proxy
server {
...
  location ^~ /sitemap {
    #BYPASS VARNISH
    proxy_pass http://127.0.0.1:611;

    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-Host $http_host;
    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Port 443;
    proxy_set_header X-Secure on;
  }
...
}
person Antoine Martin    schedule 08.02.2019
comment
Антуан, большое спасибо за это. Я собираюсь попробовать запустить его сегодня. Не могли бы вы также поделиться своим конфигом Varnish? Спасибо еще раз. - person Doyley; 12.02.2019
comment
Я тоже добавляю свой конфиг Varnish. Надеюсь, это поможет - person Antoine Martin; 12.02.2019
comment
Легенда. Спасибо большое за вашу помощь. - person Doyley; 12.02.2019