如何配置Munin-2.0.x在Fedora上用CGI(仅)生成内容?

时间:2012-10-22 21:40:44

标签: apache apache2 fedora fastcgi munin

我有一个400+节点munin-1.4.x安装,我想升级到munin-2.x,以利用munin上基于CGI的内容生成(html和图形)主服务器。我已经浏览了官方的dox(http://munin-monitoring.org/wiki/CgiHowto2),它根本就没用了。它只涵盖VirtualHost(http://munin.example.com),这不是我的设置,但我尝试将其作为起点。

具体来说,我想&需要http://example.com/munin作为动态生成列出所有节点的html内容的基本URL,以及指向各个节点页面的链接(然后在单击时动态生成/更新)。增加的问题是我在Fedora上做了这个(16),而我发现的绝大多数的howto都假设Debian / Ubuntu(或假设通过cron生成非cgi静态内容)。

官方Fedora munin软件包安装以下内容:

  • munin基目录是/ var / www / html / munin
  • munin static content direcotry是/ var / www / html / munin / static
  • munin cgi脚本(munin-cg-graph& munin-cg-html)位于/ var / www / html / munin / cgi

到目前为止我做了什么: *在/etc/munin/munin.conf中设置“html_strategy cgi”和“cgiurl_graph / munin / cgi / munin-cgi-html” *在/etc/httpd/conf/httpd.conf中添加了以下内容:

# Rewrites
RewriteEngine On
Alias /static /var/www/html/munin/static
Alias /munin /var/www/html/munin
# HTML
RewriteCond %{REQUEST_URI} !^/static
RewriteCond %{REQUEST_URI} .html$ [or]
RewriteCond %{REQUEST_URI} =/
RewriteRule ^/(.*)           /var/www/html/munin/cgi/munin-cgi-html/$1 [L]
# Images
# - remove path to munin-cgi-graph, if present
RewriteRule ^/munin/cgi/munin-cgi-graph/(.*) /$1
RewriteCond %{REQUEST_URI}                 !^/static
RewriteCond %{REQUEST_URI}                 .png$
RewriteRule ^/(.*)  /var/www/html/munin/cgi/munin-cgi-graph/$1 [L]
ScriptAlias /munin/cgi/munin-cgi-graph   /var/www/html/munin/cgi/munin-cgi-graph
<Location /munin/cgi/munin-cgi-graph>
        Options +ExecCGI FollowSymLinks
        <IfModule mod_fcgid.c>
                SetHandler fcgi-script
        </IfModule>
        <IfModule !mod_fcgid.c>
                SetHandler cgi-script
        </IfModule>
</Location>
ScriptAlias /munin/cgi/munin-cgi-html   /var/www/html/munin/cgi/munin-cgi-html
<Location /munin/cgi/munin-cgi-html>
        Options +ExecCGI FollowSymLinks
        <IfModule mod_fcgid.c>
                SetHandler fcgi-script
        </IfModule>
        <IfModule !mod_fcgid.c>
                SetHandler cgi-script
        </IfModule>
</Location>

然而,在完成所有操作(并重新启动apache)之后,当我转到http://example.com/munin时,我收到404错误,并在apache错误日志中看到:

File does not exist: /var/www/html/munin/cgi/munin-cgi-html/munin/index.html

我希望我只是遗漏了一些显而易见的东西,但是现在我完全不知道还有什么可能需要调整以使其发挥作用。感谢。

3 个答案:

答案 0 :(得分:1)

问题在于,如果您在基于“位置”的设置(而不是在VirtualHost中)中使用配置,则RewriteRule的标志是错误的。

根据mod_rewrite纪录片:

 L  Stop the rewriting process immediately and don't apply any more rules.

但是,在您的情况下,您希望传递/ munin / cgi / munin-cgi-html,以便ScriptAlias实际触发。因此:

 PT Forces the resulting URI to be passed back to the URL mapping engine for
    processing of other URI-to-filename translators, such as Alias or Redirect

如果您将规则更改为

RewriteRule ^/(.*)  /munin/cgi/munin-cgi-html/$1 [PT]  
....  
RewriteRule ^/(.*)  /munin/cgi/munin-cgi-graph/$1 [PT]

请注意相对路径,否则ScriptAlias不起作用。

答案 1 :(得分:1)

我遇到了完全相同的问题而且我挣扎了一段时间,但我最终想出了以下配置,它应该完全符合您的要求。

我的系统是Ubuntu Server 12.10。由于某些原因,我的静态文件位于/ var / cache / munin / www,我不确定这是否是Ubuntu的标准版,或者是我最近从Ubuntu 12.04升级引起的。

    RewriteEngine On

    # HTML
    RewriteRule ^/munin/(.*\.html)?$ /munin/munin-cgi/munin-cgi-html/$1 [PT]

    # Images
    RewriteRule ^/munin/munin-cgi/munin-cgi-graph/(.*) /munin/$1
    RewriteCond %{REQUEST_URI} !^/static
    RewriteRule ^/munin/(.*.png)$ /munin/munin-cgi/munin-cgi-graph/$1 [L,PT]

    <Directory /var/cache/munin/www/>
            Order deny,allow
            Allow from all
    </Directory>

    # Ensure we can run (fast)cgi scripts
    ScriptAlias /munin/munin-cgi/munin-cgi-graph /usr/lib/cgi-bin/munin-cgi-graph
    <Location /munin/munin-cgi/munin-cgi-graph>
            Options +ExecCGI
            SetHandler fcgid-script
            Allow from all
    </Location>

    ScriptAlias /munin/munin-cgi/munin-cgi-html /usr/lib/cgi-bin/munin-cgi-html
    <Location /munin/munin-cgi/munin-cgi-html>
            Options +ExecCGI
            SetHandler fcgid-script
            Allow from all
    </Location>

答案 2 :(得分:0)

确保安装了munin-cgi和依赖项:mod_fcgid。

CentOS 7,没有为位于/etc/httpd/conf.d/munin.conf的文件配置添加特殊参数。

问候。