HAProxy – Сохранять путь в URL – acl

Вопрос или проблема

Все.

У меня есть следующий конфигурационный файл:

frontend devopsdb
  bind    *:8080
  acl grafana_path path_beg /grafana/
  use_backend back_grafana if grafana_path 

backend back_grafana
  server grafana-dev 10.152.183.155:80 

Что мне нужно, так это чтобы при доступе к URL (172.21.10.76 – это моя тестовая ВМ и где находится HAProxy): http://172.21.10.76:8080/grafana/
он перенаправлялся на POD grafana: 10.152.183.155:80

Пока все хорошо, это работает.

Но как только происходит перенаправление, путь /grafana/ исчезает из URL, и поэтому HAProxy перестает перенаправлять… – http://172.21.10.76:8080/login

Возможно ли сохранить /grafana/ как-то с помощью HAProxy?

То же самое произойдет с другим POD /prometheus/

Ответ или решение

Чтобы сохранить путь в URL при использовании HAProxy, вы можете воспользоваться возможностями настройки http-request и http-response. Это позволяет манипулировать запросами и ответами внутри конфигурации HAProxy, что обеспечит необходимую функциональность для ваших приложений, таких как Grafana и Prometheus.

Пример конфигурации HAProxy с сохранением пути

Ваша текущая конфигурация выглядит следующим образом:

frontend devopsdb
  bind    *:8080
  acl grafana_path path_beg /grafana/
  use_backend back_grafana if grafana_path 

backend back_grafana
  server grafana-dev 10.152.183.155:80 

Однако, в данном случае, как вы заметили, при перенаправлении к вашем поду Grafana, путь /grafana/ исчезает из URL. Чтобы исправить это, можно добавить директивы, которые будут перенаправлять запросы с сохранением оригинального пути. Вот пример доработанной конфигурации:

frontend devopsdb
  bind    *:8080
  acl grafana_path path_beg /grafana/
  use_backend back_grafana if grafana_path 

backend back_grafana
  option http-server-close
  http-request set-header Host 10.152.183.155
  http-request rewrite-path ^/grafana/(.*) /$1
  server grafana-dev 10.152.183.155:80

Объяснение параметров конфигурации

  1. http-request set-header: Эта строка устанавливает заголовок Host для вашего внутреннего сервера. Это важно, так как некоторые приложения проверяют, что заголовок совпадает с ожидаемым, и при неправильном заголовке могут возникнуть проблемы с доступом.

  2. http-request rewrite-path: Эта директива позволяет переписать путь входящего запроса. Это означает, что когда запрос приходит на /grafana/, он будет переписан на корневой путь (/) внутри сервера Grafana, сохраняя при этом оставшуюся часть пути, если таковая имеется.

Применение для других приложений

Аналогичные изменения могут быть внесены для вашего другого приложения, например, Prometheus. Ваша конфигурация может выглядеть следующим образом:

frontend devopsdb
  bind    *:8080
  acl grafana_path path_beg /grafana/
  acl prometheus_path path_beg /prometheus/
  use_backend back_grafana if grafana_path
  use_backend back_prometheus if prometheus_path 

backend back_grafana
  option http-server-close
  http-request set-header Host 10.152.183.155
  http-request rewrite-path ^/grafana/(.*) /$1
  server grafana-dev 10.152.183.155:80

backend back_prometheus
  option http-server-close
  http-request set-header Host 10.152.183.156  # Замените на правильный IP адрес
  http-request rewrite-path ^/prometheus/(.*) /$1
  server prometheus-dev 10.152.183.156:80  # Замените на правильный IP адрес

Заключение

Внесенные изменения позволят вам сохранить необходимый путь в URL, когда запрос будет пересылаться на конечный сервер. Таким образом, ваши пользователи смогут работать с Grafana и Prometheus на ожидаемых адресах. Этот подход также способствует улучшению удобства в использовании, обеспечивая более гладкий пользовательский опыт при взаимодействии с вашими сервисами.

Оцените материал
Добавить комментарий

Капча загружается...