• 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
    rc=".shift()."
    "; };
    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
    
    ");
                            print "Error: CGI app returned no output - ";
                            print "Executing $req_params{SCRIPT_FILENAME} failed !
    ";
                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
    
    ");
                    print "Error: No such CGI app - $req_params{SCRIPT_FILENAME} may not ";
                    print "exist or is not executable by this process.
    ";
                }
     
            }
    }
    
    
    [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

  • 相关阅读:
    Error和Exception的区别
    当try和finally都包含return时的执行顺序
    String,StringBuffer处理字符串的区别
    使用idea对XML的增删改查
    IO流,字节流复制文件,字符流+缓冲复制文件
    MySQL同步故障:" Slave_SQL_Running:No" 主从同步的从表进行了写操作
    常用MQ的对比冷知识
    Redis-避免缓存穿透
    Docker容器与虚拟化技术——部署KVM虚拟化平台
    HTML日记 第三篇 关于图片的冷知识(附带一些浮动的基础知识)
  • 原文地址:https://www.cnblogs.com/caoguo/p/5024729.html
Copyright © 2020-2023  润新知