Пытаюсь настроить лак для 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
.
Чтобы включить ПРОКСИ протокол в Varnish с использованием вашей настройки Docker вам нужно будет изменить значение ${VARNISH_LISTEN}
.
Вот как это сделать:
ENV VARNISH_LISTEN :6081,PROXY
На этом этапе Varnish больше не принимает традиционные HTTP-соединения.
Согласно документам, Nginx поддерживает proxy_protocol
по версии 1.9.2
. Кажется, это совместимо с версией, которую вы используете в своем Dockerfile.
Просто добавьте следующую строку в ваш /docker/nginx/etc/vhost.conf
файл:
proxy_protocol on;
Дополнительным преимуществом использования протокола PROXY является то, что
X-Forwarded-For
значение, установленное Varnish, всегда будет содержать IP-адрес исходного клиента, независимо от количества прокси-узлов перед Varnish.
Если ПРОКСИ протокол в Nginx это не вариант, я могу предложить вам 3 альтернативных плана:
X-Real-IP
значение в вашем ACL. Этот заголовок был установлен Nginx и содержит IP-адрес клиента согласно Nginx.