サンプル/nginx 設定

提供: Munin.jp wiki
移動: 案内検索


ここでは Nginx 上で Munin をセットアップする方法を説明します。2つの設定例を説明します。1) cron モードで動作し、グラフや HTML を静的に生成する方法と、2) グラフや HTML を FastCGI で動的に生成する方法です。

目次

cron モードでグラフや HTMLを生成する場合

Nginx は静的なファイルの取り扱いが上手なので、設定ファイルは、ほぼそのまま利用出来ます。

パスは Debixn Linux システムにおけるデフォルトのものを使用します。以下の項目を /etc/nginx/sites-enabled/default に追加します:

location /munin/static/ {
        alias /etc/munin/static/;
        expires modified +1w;
}

location /munin/ {
        auth_basic            "Restricted";
        # Create the htpasswd file with the htpasswd tool.
        auth_basic_user_file  /etc/nginx/htpasswd;

        alias /var/cache/munin/www/;
        expires modified +310s;
}

サーバが Munin 専用であれば、次のようにフロントページからリダイレクトさせることもできます。

location / {
        rewrite ^/$ munin/ redirect; break;
}

FastCGIの設定

ここでは 2 つの FastCGI プロセスツリーを spawn します。1つは Munin cgi によるグラフと HTML ページの生成です。所有者が www-data によるソケットを作成し、"munin" ユーザ権限としてプロセスを実行します。

spawn-fcgi -s /var/run/munin/fastcgi-graph.sock -U www-data \
  -u munin -g munin /usr/lib/munin/cgi/munin-cgi-graph

spawn-fcgi -s /var/run/munin/fastcgi-html.sock  -U www-data \
  -u munin -g munin /usr/lib/munin/cgi/munin-html-graph

メモ: Debian や Ubuntu パッケージ・マネージャを使ってインストールする場合は、/var/log/munin/munin-cgi-*.log ファイルの所有者が "www-data" ユーザ権限かもしれません。

メモ: この例では "munin" ユーザ権限で実行するため、場合によってはログファイルの権限を変更したり、 /etc/logrotate.d/munin を変種する必要があるかもしれません。

ウェブサーバの設定

location ^~ /munin-cgi/munin-cgi-graph/ {
    fastcgi_split_path_info ^(/munin-cgi/munin-cgi-graph)(.*);
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_pass unix:/var/run/munin/fastcgi-graph.sock;
    include fastcgi_params;
}

location /munin/static/ {
    alias /etc/munin/static/;
}

location /munin/ {
    fastcgi_split_path_info ^(/munin)(.*);
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_pass unix:/var/run/munin/fastcgi-html.sock;
    include fastcgi_params;
}


認証とグループアクセス

Munin の統計情報の、特定の場所を特定ユーザ(例:お客さま等)にのみ許可したい場合は、グループを使う事が一番簡単な方法でしょう。認証をノードのグループ名と一致させると、あるグループのみ表示させることができます。

この例では、グループ名が認証ユーザ名と一致することが条件で、対象ユーザ名のグループにリダイレクトさせます。そのため、他のグループにアクセスされることはありません。

admin ユーザのみが、全ての情報を参照できます。

警告: あるユーザに他のグループ名に関する情報を知られたくないのであれば、テンプレートの変更や、ナビゲーションに関する情報の削除などが必要になるでしょう。

# Here, the whole vhost has auth requirements.
# You can duplicate it to the graph and html locations if you have
# something else that doesn't need auth.
auth_basic            "Restricted stats";
auth_basic_user_file  /some/path/to/.htpasswd;

location ^~ /cgi-bin/munin-cgi-graph/ {
    # not authenticated => no rewrite (back to auth)
    if ($remote_user ~ ^$) { break; }

   # is on the right subtree ?
    set $ok "no";
    # admin can see it all
    if ($remote_user = 'admin') { set $ok "yes"; }
    # only allow given path
    if ($uri ~ /cgi-bin/munin-cgi-graph/([^/]*)) { set $path $1; }
    if ($path = $remote_user) { set $ok "yes"; }

    # not allowed here ? redirect them where they should land
    if ($ok != "yes") {
        # redirect to where they should be
        rewrite / /cgi-bin/munin-cgi-graph/$remote_user/ redirect;
    }

    fastcgi_split_path_info ^(/cgi-bin/munin-cgi-graph)(.*);
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_pass unix:/var/run/munin/fastcgi-graph.sock;
    include fastcgi_params;
}

location /munin/static/ {
    alias /etc/munin/static/;
}

location /munin/ {
    # not authenticated => no rewrite (back to auth)
    if ($remote_user ~ ^$) { break; }

   # is on the right subtree ?
    set $ok "no";
    # admin can see it all
    if ($remote_user = 'admin') { set $ok "yes"; }
    # only allow given path
    if ($uri ~ /munin/([^/]*)) { set $path $1; }
    if ($path = $remote_user) { set $ok "yes"; }

    # not allowed here ? redirect them where they should land
    if ($ok != "yes") {
        # redirect to where they should be
        rewrite / /munin/$remote_user/ redirect;
    }

    fastcgi_split_path_info ^(/munin)(.*);
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_pass unix:/var/run/munin/fastcgi-html.sock;
    include fastcgi_params;
}