Коробка Ubuntu 9.04 с Apache на 8080 и Varnish на 80.
Недавно настроил Munin и задавался вопросом, почему графы Apache пусты. Видел из журналов, к которым обращается Мунин /server-status?auto
и получение 403 Forbidden
назад. Итак, я отредактировал /etc/apache2/monds-enabled/status.conf
чтобы разрешить доступ из 127.0.0.1
. Но это действительно сделало /server-status
общедоступный, поскольку запросы, поступающие через Varnish, похоже, исходят от 127.0.0.1
слишком.
Итак, вопрос в том, как мне настроить mod_status
быть доступным только для munin-node
а не лаком?
Я решаю эту проблему, гарантируя, что Apache получит IP-адрес фактического посетителя, даже когда запросы проходят через кеш-память varnish. Для этого я использую Apache mod_rpaf (см. http://giantdorks.org/alain/easily-get-the-correct-client-ip-with-mod_rpaf/).
Кроме того, на случай, если запрос клиента также прошел через какой-то прокси, который установил заголовок X-Forwarded-For, я сбрасываю его в своем экземпляре кеша лака (в vcl_recv):
remove req.http.X-Forwarded-For;
set req.http.X-Forwarded-For = client.ip;
Затем также скажите varnish никогда не кешировать ответ для / server-status и / server-info. Для меня работает следующее (также в vcl_recv):
if (req.url ~ "server-(info|status)") {
return (pass);
}
Это похоже на решение, скажите, что вы думаете.
Varnish добавляет несколько заголовков HTTP, например X-Varnish
на каждый запрос, который он отправляет в бэкэнд. Их можно использовать в конфигурации Apache для распознавания запросов, поступающих от Varnish.
В /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
У меня была такая же ситуация с 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/