本篇介紹如何設定 Grafana 整合 Nginx 網頁伺服器的反向代理(reverse proxy)與 HTTP 基本認證(basic access authentication),透過外部網址登入並存取 Grafana 網頁內容。
這裡我們希望 Grafana 服務可以開在內部的 http://localhost:3000/
,然後將 Nginx 對外的 https://my.domain.com/grafana/
導向至內部的 Grafana。
參考 Grafana 的文件,先修改 /etc/grafana/grafana.ini
設定檔,更改 [server]
中網址相關的設定:
[server] # 內部 Grafana 使用的 HTTP 連接埠 http_port = 3000 # 公開網址的網域名稱 domain = my.domain.com # 完整的公開網址(含 Grafana 子路徑) root_url = %(protocol)s://%(domain)s:%(http_port)s/grafana/ # 採用 root_url 中的 Grafana 子路徑 serve_from_sub_path = true
修改 Nginx 中網站的設定檔,加入以下 Grafana 所需的反向代理(reverse proxy)設定:
# WebSocket 標頭的頂層 http 設定 map $http_upgrade $connection_upgrade { default upgrade; '' close; } # 內部 Grafana 位址 upstream grafana { server localhost:3000; } server { # ... # Grafana 設定 location /grafana/ { rewrite ^/grafana/(.*) /$1 break; proxy_set_header Host $http_host; proxy_pass http://grafana; } # Grafana Live WebSocket 連線設定 location /grafana/api/live/ { rewrite ^/grafana/(.*) /$1 break; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header Host $http_host; proxy_pass http://grafana; } }
更改設定之後,重新啟動 Grafana 與 Nginx 服務:
# 重新啟動 Grafana 服務 sudo systemctl restart grafana-server # 重新啟動 Nginx 服務 sudo systemctl restart nginx
這時候開啟 https://my.domain.com/grafana/
這個外部網址,就可以看到 Grafana 的登入畫面了。
Grafana 有自己的帳號認證系統,若前面的 Nginx 網頁有採用 HTTP 基本認證,就會造成使用者要登入兩次的問題,若希望 Grafana 可以整合 Nginx 伺服器的 HTTP 基本認證,可以依照以下的方式設定。
參考 Grafana 的文件,修改 /etc/grafana/grafana.ini
設定檔,啟用 AuthProxy
功能:
[auth.proxy] # 啟用 AuthProxy enabled = true # 包含使用者名稱(或 Email)的標頭名稱 header_name = X-WEBAUTH-USER # 標頭內容,可以是 username 或 email header_property = username # 自動註冊 auto_sign_up = true # 快取時間(TTL) sync_ttl = 60
接著修改 Nginx 網頁設定檔,在 Grafana 的兩個設定區塊中加上 HTTP 基本認證相關的設定:
server{ location /grafana/ { # ... # Basic 認證 auth_basic "Grafana"; auth_basic_user_file /etc/nginx/htpasswd; # Grafana 用標頭 proxy_set_header X-WEBAUTH-USER $remote_user; # 清空 Authorization proxy_set_header Authorization ""; } location /grafana/api/live/ { # ... # Basic 認證 auth_basic "Grafana"; auth_basic_user_file /etc/nginx/htpasswd; # Grafana 用標頭 proxy_set_header X-WEBAUTH-USER $remote_user; # 清空 Authorization proxy_set_header Authorization ""; } }
關於 Nginx 伺服器的 HTTP 基本認證與密碼檔案設定,可以參考 G. T. Wang 的教學文章。
除了整合 Nginx 的 HTTP 基本認證之外,我們也可以直接採用 Grafana 的匿名模式,停用使用者認證,直接以管理者身份來使用 Grafana,對於管理者個人使用的 Grafana 監控網頁,就可以採用這樣的方式:
[auth.anonymous] # 啟用匿名模式 enabled = true # 將匿名使用者視為管理者 org_role = Admin