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

Лак PURGE client.ip docker-compose

Пытаюсь настроить лак для Magento2.

Вопрос: Я не могу настроить кеш PURGE varnish.

Вот моя сборка: https://github.com/zhartaunik/magento2-docker

Настройки лака: https://github.com/zhartaunik/magento2-docker/tree/master/docker/varnish

Я использую docker-compose. ЛАК ИЗ ЛАКА: 6.2 vcl 4.0;

Я пытаюсь настроить команду очистки безопасным способом. Я не уверен, как лучше всего настроить лак, но Magento рекомендует следующее:

acl purge {
    "nginx";
}

И есть следующая проверка:

sub vcl_recv {
    if (req.method == "PURGE") {
        if (!client.ip ~ purge) {
            return (synth(405, "Purging not allowed for " + client.ip));
        }

В моем случае, когда я пытаюсь удалить лак с консоли / интерфейса администратора, я всегда сталкиваюсь со следующей ошибкой:

<!DOCTYPE html>
<html>
  <head>
    <title>405 Purging not allowed for 192.168.128.7</title>
  </head>
  <body>
    <h1>Error 405 Purging not allowed for 192.168.128.7</h1>
    <p>Purging not allowed for 192.168.128.7</p>
    <h3>Guru Meditation:</h3>
    <p>XID: 32770</p>
    <hr>
    <p>Varnish cache server</p>
  </body>
</html>

После перезапуска докера этот IP-адрес изменится.

Когда я пытаюсь настроить очистку acl с именами контейнеров, я все еще сталкиваюсь с той же ошибкой. Однако добавление имени контейнера в «белый список» и запуск

curl -k -X ОЧИСТКА https: //magento2.docker

Проходит эту проверку.

Как лучше и безопаснее всего настроить acl purge раздел?

Если вы используете Nginx как твой Терминатор TLS, то client.ip ценность всегда рискует быть Nginx IP. Это предсказуемо, но не обязательно безопасно.

Что вам следует сделать, это убедиться Nginx & Лак соединяться друг с другом с помощью ПРОКСИ протокол. Это гарантирует, что исходный IP-адрес клиента будет передан и сохранен в client.ip.

Настройка протокола PROXY на Varnish

Чтобы включить ПРОКСИ протокол в Varnish с использованием вашей настройки Docker вам нужно будет изменить значение ${VARNISH_LISTEN}.

Вот как это сделать:

ENV VARNISH_LISTEN  :6081,PROXY

На этом этапе Varnish больше не принимает традиционные HTTP-соединения.

Настройка протокола PROXY в Nginx

Согласно документам, Nginx поддерживает proxy_protocol по версии 1.9.2. Кажется, это совместимо с версией, которую вы используете в своем Dockerfile.

Просто добавьте следующую строку в ваш /docker/nginx/etc/vhost.conf файл:

proxy_protocol on;

Дополнительным преимуществом использования протокола PROXY является то, что X-Forwarded-For значение, установленное Varnish, всегда будет содержать IP-адрес исходного клиента, независимо от количества прокси-узлов перед Varnish.

Запасной план

Если ПРОКСИ протокол в Nginx это не вариант, я могу предложить вам 3 альтернативных плана:

  1. Используйте Hitch в качестве прокси TLS: он поддерживает ПРОКСИ протокол, он очень легкий и разработан Varnish Software
  2. Используйте HAProxy в качестве TLS-прокси: они изобрели ПРОКСИ протокол, это немного тяжелее, чем Hitch
  3. Не использовать ПРОКСИ протокол и соответствовать X-Real-IP значение в вашем ACL. Этот заголовок был установлен Nginx и содержит IP-адрес клиента согласно Nginx.