Jak proxy / grafana z Nginx?

15

Mam skonfigurowane i uruchomiłem domyślną grafana i działa zgodnie z oczekiwaniami na http: // localhost: 3000 . Usiłuję proxy w nginx, gdzie mam zainstalowany ssl. Usiłuję uzyskać odpowiedź na https: // localhost / grafana, ale służy tylko:

{{alert.title}}

Mam to w moim bloku serwera nginx:

location /grafana {
     proxy_pass         http://localhost:3000;
     proxy_set_header   Host $host;
}
AX Labs
źródło

Odpowiedzi:

27

Wygląda na to, że nginx obsługuje przepisywanie żądań do serwera proxy, więc zaktualizowanie konfiguracji do tego sprawiło, że działało:

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

Mój grafana.ini ma również zaktualizowany katalog główny:

[server]
root_url = %(protocol)s://%(domain)s:%(http_port)s/grafana
AX Labs
źródło
Mogę potwierdzić, że to działa. Zauważ, że ze względu na statyczne zasoby potrzebne są zarówno przepisanie nginx, jak i konfiguracja root_url, ale w przeciwnym razie działa to w Grafana 2.2.
Mahn
2
Ponadto, jeśli masz podstawowy http auth przed nginx zanim trafi grafana, upewnij się zastąpić Authorizationnagłówek o tym proxy_set_header Authorization "";w swoim proxy bloku lokalizacji, inaczej Grafana będzie nalegać na ponowne używanie tych poświadczeń dla połączeń ze źródłem danych.
Mahn,
Reguła przepisywania jest niezbędna, aby działała. To naprawdę powinno zostać dodane do dokumentacji Grafana
dasup
@dasup Nie, reguła przepisywania nie jest wymagana (przynajmniej nie w grafana 4.6). Musisz ustawić proxy_passdołączanie identyfikatora URI, takiego jak /, w przeciwnym razie żądanie zostanie przekazane w niezmienionej formie (wyjaśnienie znajduje się również na stronie nginx.com/resources/admin-guide/reverse-proxy ). Tak więc konfiguracja powinna być proxy_pass http://localhost:3000/;dokładnie taka, jak podaje dokumentacja grafana.
ChrisWue,
10

Dodając odpowiedź @ AX-Labs, nie musisz przepisywać adresu 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/

Zwróć uwagę na dodatkowy / w bloku lokalizacji, który robi różnicę.

Jeśli chcesz zobaczyć cały plik, odwiedź https://gist.github.com/mvadu/5fbb7f5676ce31f2b1e6, gdzie mam konfigurację proxy proxy dla Infludb oraz grafana.

Adarsha
źródło
1
Tak, różnica jest wyjaśniona tutaj: nginx.com/resources/admin-guide/reverse-proxy
ChrisWue
2
Pamiętaj, że końcowe ukośniki są http://localhost:3000/;również ważne.
bitnik
I w %(protocol)s://%(domain)s:%(http_port)s/grafana/- wszystkie lokalizacje powinny mieć ukośnik końcowy.
patricktokeeffe
3

Mam ten sam problem, gdy używam nginx i grafana na dokerze, w dwóch różnych kontenerach. Przeszedł następujące opcje, aby dokować-komponować w usłudze grafana, postępując zgodnie z http://docs.grafana.org/installation/behind_proxy/#nginx-configuration-w--sub-path :

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

Ale to nie działa i pokazuje konsoli mojego przeglądarki: net::ERR_CONTENT_LENGTH_MISMATCH.

Aby to naprawić, dodałem następujący wiersz do mojej konfiguracji nginx:

location /grafana/ {
  proxy_pass http://monitoring_grafana:3000/;
  proxy_max_temp_file_size 0; # THIS MADE THE TRICK!
}
Boris Quiroz
źródło
0

FYI:

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

powoduje błędy proxy dla niektórych wywołań API. Znajduję:

root_url = %(protocol)s://%(domain)s:/grafana
JasonfromDR
źródło