Как прокси / графана с nginx?


15

Я установил и запустил графану по умолчанию, и она работает как положено на http: // localhost: 3000 . Я пытаюсь прокси с nginx, где у меня установлен ssl. Я пытаюсь, чтобы он отвечал на https: // localhost / grafana, но он просто обслуживает следующее:

{{alert.title}}

У меня есть это в моем блоке сервера nginx:

location /grafana {
     proxy_pass         http://localhost:3000;
     proxy_set_header   Host $host;
}

Ответы:


27

Кажется, nginx поддерживает переписывание запросов к прокси-серверу, поэтому обновление конфигурации до этого заставило его работать:

location /grafana {
     proxy_pass         http://localhost:3000;
     rewrite  ^/grafana/(.*)  /$1 break;
     proxy_set_header   Host $host;
}

Мой grafana.ini также имеет обновленный корень:

[server]
root_url = %(protocol)s://%(domain)s:%(http_port)s/grafana

Я могу подтвердить, что это работает. Обратите внимание, что из-за статических ресурсов необходимы как перезапись nginx, так и конфигурация root_url, но в остальном это помогает Grafana 2.2.
Ман

2
Кроме того, если у вас есть базовая http-аутентификация перед nginx до того, как он попадет в grafana, убедитесь, что вы переопределяете Authorizationзаголовок, включив его proxy_set_header Authorization "";в блок размещения прокси-сервера, иначе Grafana будет настаивать на повторном использовании этих учетных данных для соединений с источниками данных.
Ман

Правило перезаписи необходимо, чтобы оно работало. Это действительно следует добавить в документацию Grafana по
dasup

@dasup Нет, правило перезаписи не требуется (по крайней мере, в Grafana 4.6). Вам нужно установить proxy_passвключение URI, например /, в противном случае запрос передается как есть (см. Также nginx.com/resources/admin-guide/reverse-proxy для объяснения). Таким образом, конфиг должен быть proxy_pass http://localhost:3000/;именно таким, в каком состоянии находится графическая документация.
ChrisWue

10

Добавляя ответ @ AX-Labs, вам не нужно переписывать URL.

nginx.conf

location /grafana/ {
     proxy_pass         http://localhost:3000/;
     proxy_set_header   Host $host;
}

grafana.ini update root:

[server]
root_url = %(protocol)s://%(domain)s:%(http_port)s/grafana/

Обратите внимание на дополнительный / в блоке местоположения, который имеет все значение.

Если вы хотите просмотреть весь файл, посетите страницу https://gist.github.com/mvadu/5fbb7f5676ce31f2b1e6, где у меня есть настройка обратного прокси-сервера для Infludb, а также графана.


1
Да, разница объясняется здесь: nginx.com/resources/admin-guide/reverse-proxy
ChrisWue

2
Обратите внимание, что косая черта http://localhost:3000/;также важна.
битник

А во %(protocol)s://%(domain)s:%(http_port)s/grafana/всех местах должна быть косая черта.
patricktokeeffe

3

Я получил ту же проблему при использовании nginx и grafana на докере, в двух разных контейнерах. Перешли следующие опции для docker-compose на сервисе grafana, следуя http://docs.grafana.org/installation/behind_proxy/#nginx-configuration-with-sub-path :

- GF_SERVER_DOMAIN=foo.bar.com
- GF_SERVER_ROOT_URL=%(protocol)s://%(domain)s:/grafana

Но это не сработало, и консоль показывает свой браузер: net::ERR_CONTENT_LENGTH_MISMATCH.

Итак, чтобы исправить это, я добавил следующую строку в мою конфигурацию nginx:

location /grafana/ {
  proxy_pass http://monitoring_grafana:3000/;
  proxy_max_temp_file_size 0; # THIS MADE THE TRICK!
}

0

FYI:

root_url = %(protocol)s://%(domain)s:%(http_port)s/grafana

вызывает ошибки прокси для некоторых вызовов API. Я нахожу:

root_url = %(protocol)s://%(domain)s:/grafana
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.