Я хочу разместить Prometheus за обратным прокси-сервером Apache для аутентификации и контроля доступа. Это для версии Prometheus, которая поставляется с Debian Stretch (prometheus --version
указывает version 1.5.2+ds (branch: debian/sid, revision: 1.5.2+ds-2+b3)
) и для Apache 2.4.
Меня уже слушает Прометей 127.0.0.1:9090
(например, согласно netstat -tlpn
) и у меня это в моем VirtualHost
конфигурация:
<Location "/prometheus">
ProxyPass "http://localhost:9090"
ProxyPassReverse "http://localhost:9090"
</Location>
Однако когда я навещаю https://my-server.com/prometheus
перенаправление на https://my-server.com/graph
происходит (посредством кода статуса HTTP 302 и Location: /graph
), который не может обслуживаться обратным прокси-сервером в его текущей конфигурации.
Как я могу изменить конфигурацию для этой версии Prometheus), чтобы посещение https://my-server.com/prometheus
будет успешно перенаправлен на https://my-server.com/prometheus/graph
, т.е. все "вещи", связанные с Prometheus, будут обслуживаться под общим префиксом URL /prometheus
?
ОБНОВИТЬ Одна вещь, которая сейчас меня озадачивает, - это то, что Прометей CHANGELOG.md
указывает этот флаг командной строки -web.route-prefix
был представлен еще в версии 1.0.0, но пакет Debian /etc/default/prometheus
не упоминает этот флаг, хотя упоминает многие другие (как будто он не поддерживает его, несмотря на то, что якобы основан на версии 1.5.2).
Сейчас я использую более новые версии prometheus, у меня это тоже было в серии 1.X,
-web.external-url=https://<proxyhost>/prometheus
Попробуйте и посмотрите, работает ли это в вашей версии (я не могу найти в Интернете старую документацию, но некоторые старые github вопросы похоже, тоже имеет к нему отношение).
Вы также должны настроить --web.route-prefix
.
"http: // TOTO / prometheus"-> nginx ->"http: // локальный: 9090"-> Прометей
Решение такое:
-web.external-url=https://<proxyhost>/prometheus --web.route-prefix=/
Следующая конфигурация Apache для обратного прокси (показана только соответствующая часть) решила проблему в моей ситуации (несколько неуклюже):
<Location "/">
Redirect "/alerts" "/prometheus/alerts"
Redirect "/api" "/prometheus/api"
Redirect "/config" "/prometheus/config"
Redirect "/flags" "/prometheus/flags"
Redirect "/graph" "/prometheus/graph"
Redirect "/rules" "/prometheus/rules"
Redirect "/static" "/prometheus/static"
Redirect "/status" "/prometheus/status"
Redirect "/targets" "/prometheus/targets"
</Location>
<Location "/prometheus">
ProxyPass "http://localhost:9090"
ProxyPassReverse "http://localhost:9090"
</Location>
Конфигурация ниже работает даже без опции "-web.external-url" на стороне Prometheus-core. Вы также можете перенаправить Alert Manager в том же VirtualHost. Итак, на / prometheus / - это Прометей, а на / manager / - это диспетчер предупреждений.
<VirtualHost *:80>
ProxyRequests On
ProxyPreserveHost On
RewriteEngine On
ProxyPass /prometheus/ http://localhost:9090/
ProxyPassReverse /prometheus/ http://localhost:9090/
Redirect "/" "/prometheus/"
ProxyPass /manager/ http://localhost:9093/
ProxyPassReverse /manager/ http://localhost:9093/
Redirect "/#/alerts" "/manager/#/alerts"
</VirtualHost>