Nginx+nagios安装配置

 

Nginx+nagios安装配置

 

[root@Nagios ~]# vi /etc/nginx/nginx.conf

    server {
        listen  80;
        server_name     localhost;
        auth_basic "Nagios Access";
        auth_basic_user_file /usr/local/nagios/passwd;
        location / {
            root   /usr/local/nagios/share;
            index  index.html index.htm index.php;
        }

        location ~ .*\.(php|php5)?$ {
            root /usr/local/nagios/share;
            fastcgi_pass  127.0.0.1:9000;
            fastcgi_index index.php;
            include fastcgi.conf;
        }

        location /nagios {
            alias /usr/local/nagios/share;
        }

        location /cgi-bin/images {
            alias /usr/local/nagios/share/images;
        }

        location /cgi-bin/stylesheets {
            alias /usr/local/nagios/share/stylesheets;
         }

        location /cgi-bin {
            alias /usr/local/nagios/sbin;
        }

        location ~ .*\.(cgi|pl)?$ {
            gzip off;
            root   /usr/local/nagios/sbin;
            rewrite ^/nagios/cgi-bin/(.*)\.cgi /$1.cgi break;
            fastcgi_pass  unix:/var/run/perl-fastcgi.sock;
            fastcgi_param SCRIPT_FILENAME /usr/local/nagios/sbin$fastcgi_script_name;
            fastcgi_index index.cgi;
            fastcgi_param  REMOTE_USER        $remote_user;
            fastcgi_param HTTP_ACCEPT_LANGUAGE en_US;
            include fastcgi_params;
            fastcgi_read_timeout   60;
         }
         
         location /nagiosql/ {
            alias /usr/local/nagios/nagiosql;
         }
    }



[root@Nagios ~]# echo -en 'nagios:'>/usr/local/nagios/share/passwd 
[root@Nagios ~]# perl -e 'print crypt($ARGV[0], "nagios")' passwd >>/usr/local/nagios/share/passwd

 

 

# 安装 PHP php-fpm
[root@Nagios ~]# yum install -y php php-fpm
[root@Nagios ~]# /etc/init.d/php-fpm start

 

# 安装perl FCGI
[root@Nagios ~]# yum install -y perl-devel
[root@Nagios src]# wget http://www.cpan.org/modules/by-module/FCGI/FCGI-0.74.tar.gz
[root@Nagios src]# tar zxf FCGI-0.74.tar.gz
[root@Nagios src]# cd FCGI-0.74
[root@Nagios FCGI-0.74]# perl Makefile.PL
[root@Nagios FCGI-0.74]# make && make install

[root@Nagios ~]# touch /usr/bin/fastcgi-wrapper.pl 
[root@Nagios ~]# chmod 755 /usr/bin/fastcgi-wrapper.pl 
[root@Nagios ~]# vi /usr/bin/fastcgi-wrapper.pl
#!/usr/bin/perl
 
use FCGI;
use Socket;
use POSIX qw(setsid);
 
require 'syscall.ph';
 
&daemonize;
 
#this keeps the program alive or something after exec'ing perl scripts
END() { } BEGIN() { }
*CORE::GLOBAL::exit = sub { die "fakeexit\nrc=".shift()."\n"; };
eval q{exit};
if ($@) {
    exit unless $@ =~ /^fakeexit/;
};
 
&main;
 
sub daemonize() {
    chdir '/'                 or die "Can't chdir to /: $!";
    defined(my $pid = fork)   or die "Can't fork: $!";
    exit if $pid;
    setsid                    or die "Can't start a new session: $!";
    umask 0;
}
 
sub main {
        #$socket = FCGI::OpenSocket( "127.0.0.1:8999", 10 ); #use IP sockets
        $socket = FCGI::OpenSocket( "/var/run/perl-fastcgi.sock", 10 );
        $request = FCGI::Request( \*STDIN, \*STDOUT, \*STDERR, \%req_params, $socket );
        if ($request) { request_loop()};
            FCGI::CloseSocket( $socket );
}
 
sub request_loop {
        while( $request->Accept() >= 0 ) {
 
           #processing any STDIN input from WebServer (for CGI-POST actions)
           $stdin_passthrough ='';
           $req_len = 0 + $req_params{'CONTENT_LENGTH'};
           if (($req_params{'REQUEST_METHOD'} eq 'POST') && ($req_len != 0) ){
                my $bytes_read = 0;
                while ($bytes_read < $req_len) {
                        my $data = '';
                        my $bytes = read(STDIN, $data, ($req_len - $bytes_read));
                        last if ($bytes == 0 || !defined($bytes));
                        $stdin_passthrough .= $data;
                        $bytes_read += $bytes;
                }
            }
 
            #running the cgi app
            if ( (-x $req_params{SCRIPT_FILENAME}) &&  #can I execute this?
                 (-s $req_params{SCRIPT_FILENAME}) &&  #Is this file empty?
                 (-r $req_params{SCRIPT_FILENAME})     #can I read this file?
            ){
        pipe(CHILD_RD, PARENT_WR);
        my $pid = open(KID_TO_READ, "-|");
        unless(defined($pid)) {
            print("Content-type: text/plain\r\n\r\n");
                        print "Error: CGI app returned no output - ";
                        print "Executing $req_params{SCRIPT_FILENAME} failed !\n";
            next;
        }
        if ($pid > 0) {
            close(CHILD_RD);
            print PARENT_WR $stdin_passthrough;
            close(PARENT_WR);
 
            while(my $s = <KID_TO_READ>) { print $s; }
            close KID_TO_READ;
            waitpid($pid, 0);
        } else {
                    foreach $key ( keys %req_params){
                       $ENV{$key} = $req_params{$key};
                    }
                    # cd to the script's local directory
                    if ($req_params{SCRIPT_FILENAME} =~ /^(.*)\/[^\/]+$/) {
                            chdir $1;
                    }
 
            close(PARENT_WR);
            close(STDIN);
            #fcntl(CHILD_RD, F_DUPFD, 0);
            syscall(&SYS_dup2, fileno(CHILD_RD), 0);
            #open(STDIN, "<&CHILD_RD");
            exec($req_params{SCRIPT_FILENAME});
            die("exec failed");
        }
            }
            else {
                print("Content-type: text/plain\r\n\r\n");
                print "Error: No such CGI app - $req_params{SCRIPT_FILENAME} may not ";
                print "exist or is not executable by this process.\n";
            }
 
        }
}


[root@Nagios ~]# touch /etc/init.d/perl-fastcgi
[root@Nagios ~]# chmod 755 /etc/init.d/perl-fastcgi 
[root@Nagios ~]# vi /etc/init.d/perl-fastcgi
#!/bin/sh
#
# nginx – this script starts and stops the nginx daemon
#
# chkconfig: - 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /opt/nginx/conf/nginx.conf
# pidfile: /opt/nginx/logs/nginx.pid
 
# Source function library.
. /etc/rc.d/init.d/functions
 
# Source networking configuration.
. /etc/sysconfig/network
 
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
 
perlfastcgi="/usr/bin/fastcgi-wrapper.pl"
prog=$(basename perl)
 
lockfile=/var/lock/subsys/perl-fastcgi
 
start() {
    [ -x $perlfastcgi ] || exit 5
    echo -n $"Starting $prog: "
    daemon $perlfastcgi
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}
 
stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}
 
restart() {
    stop
    start
}
 
reload() {
    echo -n $”Reloading $prog: ”
    killproc $nginx -HUP
    RETVAL=$?
    echo
}
 
force_reload() {
    restart
}
rh_status() {
    status $prog
}
 
rh_status_q() {
    rh_status >/dev/null 2>&1
}
 
case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
        exit 2
    esac

 

nagios安装请参考该篇:http://www.cnblogs.com/caoguo/p/4981903.html

posted @ 2015-12-06 23:08  ca0guo  阅读(804)  评论(0编辑  收藏  举报