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;
}

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

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.


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!
}

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.