Làm thế nào để proxy / grafana với nginx?


15

Tôi đã thiết lập và bắt đầu grafana mặc định và nó hoạt động như mong đợi trên http: // localhost: 3000 . Tôi đang cố gắng ủy quyền nó với nginx nơi tôi đã cài đặt ssl. Tôi đang cố gắng để nó phản hồi với https: // localhost / grafana nhưng nó chỉ phục vụ như sau:

{{alert.title}}

Tôi có cái này trong khối máy chủ nginx của mình:

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

Câu trả lời:


26

Có vẻ như nginx hỗ trợ viết lại các yêu cầu đến máy chủ proxy, vì vậy việc cập nhật cấu hình để làm cho nó hoạt động:

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

Grafana.ini của tôi cũng có một bản cập nhật gốc:

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

Tôi có thể xác nhận rằng điều này hoạt động. Lưu ý rằng do các tài sản tĩnh, cả nginx viết lại và cấu hình root_url đều cần thiết, nhưng nếu không thì nó thực hiện thủ thuật với Grafana 2.2.
Mahn

2
Ngoài ra, nếu bạn có http auth cơ bản trước nginx trước khi nó chạm grafana, hãy đảm bảo bạn ghi đè Authorizationtiêu đề bằng cách đưa proxy_set_header Authorization "";vào khối vị trí proxy của mình, nếu không Grafana sẽ khăng khăng sử dụng lại các thông tin đăng nhập này cho các kết nối nguồn dữ liệu.
Mahn

Quy tắc viết lại là điều cần thiết để làm cho nó hoạt động. Điều này thực sự cần được thêm vào tài liệu Grafana
dasup

@dasup Không, quy tắc viết lại là không bắt buộc (ít nhất là không phải trong grafana 4.6). Bạn cần đặt proxy_passđể bao gồm một URI, chẳng hạn như /yêu cầu được chuyển qua (xem thêm nginx.com/resource/admin-guide/reverse-proxy để được giải thích). Vì vậy, cấu hình nên proxy_pass http://localhost:3000/;là chính xác những gì trạng thái tài liệu grafana.
ChrisWue

10

Thêm vào câu trả lời @ AX-Labs, bạn không cần phải viết lại 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/

Lưu ý thêm / trong khối vị trí, điều đó làm cho tất cả sự khác biệt.

Nếu bạn muốn xem toàn bộ tập tin, vui lòng truy cập https://gist.github.com/mvadu/5fbb7f5676ce31f2b1e6 nơi tôi có thiết lập proxy hoàn nguyên cho Infludb cũng như grafana.


1
Có, sự khác biệt được giải thích ở đây: nginx.com/resource/admin-guide/reverse-proxy
ChrisWue

2
Lưu ý rằng dấu gạch chéo trong http://localhost:3000/;cũng quan trọng.
bitnik

Và trong %(protocol)s://%(domain)s:%(http_port)s/grafana/- tất cả các vị trí nên có dấu gạch chéo.
patricktokeeffe

3

Tôi gặp vấn đề tương tự khi sử dụng nginx và grafana trên docker, trong hai thùng chứa khác nhau. Đã vượt qua các tùy chọn sau để soạn thảo docker trên dịch vụ grafana, sau 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

Nhưng nó không hoạt động và bảng điều khiển trình duyệt của tôi hiển thị : net::ERR_CONTENT_LENGTH_MISMATCH.

Vì vậy, để khắc phục nó, tôi đã thêm dòng sau vào cấu hình nginx của mình:

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

0

Tài chính

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

gây ra lỗi proxy cho một số lệnh gọi API. Tôi tìm thấy:

root_url = %(protocol)s://%(domain)s:/grafana
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.