Это похоже на решение, скажите мне, что Вы думаете.
Varnish добавляет некоторые HTTP-заголовки как X-Varnish
к каждому запросу это отправляет к бэкенду. Они могут использоваться в конфигурации Apache для распознавания запросов, прибывающих из Лака.
В /etc/apache2/mods-enabled/status.conf
:
<IfModule mod_status.c>
SetEnvIf X-Varnish ".+" from_varnish
ExtendedStatus On
<Location /server-status>
SetHandler server-status
Order allow,deny
Deny from env=from_varnish
Allow from localhost ip6-localhost 127.0.0.1
</Location>
</IfModule>
Затем скажите munin порту монитора 8080 вместо 80. Запросы от munin-node
прибудет непосредственно и так не будет иметь X-Varnish
заголовок установлен.
Добавленный к /etc/munin/plugin-conf.d/munin-node
:
[apache_*]
env.url http://127.0.0.1:%d/server-status?auto
env.ports 8080
Я обращаюсь к этому, гарантируя, что Apache получит IP-адрес фактического посетителя, даже когда запросы проходят через кеш-память varnish. Для этого я использую Apache mod_rpaf (см. http://giantdorks.org/alain/easily-get-the-correct-client-ip-with-mod_rpaf/ ).
Также на всякий случай запрос клиента также прошел через некоторый прокси, который установил заголовок X-Forwarded-For, я сбрасываю его в своем экземпляре кэша varnish (в vcl_recv):
remove req.http.X-Forwarded-For;
set req.http.X-Forwarded-For = client.ip;
Затем также указываю varnish никогда не кэшировать ответ для / server-status и / информация о сервере. У меня работает следующее (также в vcl_recv):
if (req.url ~ "server-(info|status)") {
return (pass);
}
У меня была такая же ситуация с Ubuntu 12.04, Apache2 на порту 8008 и Varnish на порту 80. С Varnish VCL я использовал мою страницу состояния сервера, которая была кэширована в течение часа, поэтому она все еще была доступен, но предоставил отчет о состоянии только после обновления кеша. Внедрение решения Алена сделало текущий статус сервера доступным через Varnish по мере его передачи в бэкэнд. Чтобы защитить свой статус сервера, я сделал следующее:
Я сконфигурировал munin-node для прослушивания 8008 в /etc/munin/plugin-conf.d/munin-node:
[apache_*]
env.url http://127.0.0.1:%d/server-status?auto
env.ports 8008
. Затем я добавил следующую строку в свой VCL в верхней части раздела vcl_recv:
if (req.url ~ "^/server-status") {
error 403;
}
Это блокирует доступ к URL-адресу server-status на порту 80 с запрещенным сообщением 403, но munin-node все еще может подключиться к server-status на localhost: 8008
Это сообщение был полезен: http: // nwlinux. com / how-to-configure-varnish-on-ubuntu-server /