Linux

Grafana 整合 Nginx 網頁伺服器設定教學與範例

本篇介紹如何設定 Grafana 整合 Nginx 網頁伺服器的反向代理(reverse proxy)與 HTTP 基本認證(basic access authentication),透過外部網址登入並存取 Grafana 網頁內容。

Grafana 搭配 Nginx 反向代理設定

這裡我們希望 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 的登入畫面了。

AuthProxy 使用者認證

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 的教學文章

Grafana 匿名模式

除了整合 Nginx 的 HTTP 基本認證之外,我們也可以直接採用 Grafana 的匿名模式,停用使用者認證,直接以管理者身份來使用 Grafana,對於管理者個人使用的 Grafana 監控網頁,就可以採用這樣的方式:

[auth.anonymous]
# 啟用匿名模式
enabled = true

# 將匿名使用者視為管理者
org_role = Admin
Share
Published by
Office Guide

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

1 年 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

1 年 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

1 年 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

1 年 ago