nginx+nagios3.1.2支持perl cgi ,php cgi 簡要配置

火星人 @ 2014-03-03 , reply:0
←手機掃碼閱讀

nginx+nagios3.1.2支持perl cgi ,php cgi 簡要配置

基於Nginx的nagios-3.1.2簡要配置。此文主要關注於Nginx的perl-cgi和php-cgi的安裝及設置。
本文基於 http://www.lazysa.com/2009/05/392.html ,http://www.thismail.org/bbs/thread-3002-1-1.html 改進。
我的主機環境
操作系統:debian 5.0
web伺服器:Nginx 6.32
CGI-perl環境:nginx-fcgi
CGI-php環境:FastCGI
nagios版本:nagios 3.1.2
nagios 的安裝在這裡就不談了,你可以看看這個:
http://nagios-cn.sourceforge.net/nagios-cn/
先說說我對nginx解析cgi腳本流程的理解:
      ㈡          ㈢         ㈣
nginx---->fastcgi---->result---->nginx
↑㈠    (perl,php)                        ↓㈤
client                                        client
在fastcgi中,有兩種處理cgi的模式:sock 和tcp協議。

下面安裝並配置Nginx
在debian下,很方便
apt-get install nginx
現在開始配置PHP CGI支持。
apt-get install lighttpd  ,安裝lighttpd,我們需要它的spawn-fcgi
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 10 -u www-data -f /usr/bin/php-cgi #這裡就是建立PHP CGI 的監聽後台進程,響應目的埠為9000的請求。spawn-fcig 參數解釋: -a 監聽地址,-p 埠,-C 啟動N個監聽進程,-u 啟動進程的用戶名, -f 處理php解析的程序 。
在 /etc/nginx/sites-available/default 中加入:
        location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;       #這裡是監聽PHP解析請求的設置。9000為埠號,127.0.0.1 就不用說了吧? 當然也可以填其他的主機IP,但得有相應服務可以訪問才行。
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
                include /etc/nginx/fastcgi_params;  
在nginx中建立虛擬站點(主機)。
在 /etc/nginx/conf.d 中
touch nagios.conf 並加入以下內容:

server
       {
               listen       80;
               server_name  www.nagios-t.com;          #綁定的虛擬主機站定域名。當訪問www.nagios-t.com時,自動在下面 root 定義的目錄中尋找index文件。
               index index.php index.html index.htm;
               root  /usr/local/nagios/share;
               location ~ .*\.php?$
               {
                        gzip off;
                       include /etc/nginx/conf.d/enable_php5.conf;
                        fastcgi_pass  127.0.0.1:9000;    #這裡是解析php cgi的腳本介面。
                        fastcgi_index index.php;
               }
                location /nagios/
               {
                gzip off;
                alias /usr/local/nagios/share/;            #nginx中的別名設置,相當於apache中的虛擬目錄
                index index.html index.htm index.php;
             }
enable_php5.conf 跟 /etc/nginx/fastcgi_params 的內容一樣。可以去掉,但我沒測試。
在 /etc/hosts 中加入 www.nagios-t.com 127.0.0.1
現在你可以重啟nagios 和nginx ,應該可以看到左邊的列表了。


CGI-perl環境:
獲取perl fastcgi腳本。
wget http://www.nginx.eu/nginx-fcgi/nginx-fcgi.txt
首先安裝Perl的FCGI模塊
   1.wget http://www.cpan.org/modules/by-module/FCGI/FCGI-0.67.tar.gz
   2.tar -zxvf FCGI-0.67.tar.gz
   3.cd FCGI-0.67
   4. perl Makefile.PL
   5. make && make install
還可以使用如下方法安裝:
perl -MCPAN -e 'install FCGI'
安裝FCGI-ProcManager
   1. wget http://search.cpan.org/CPAN/authors/id/G/GB/GBJK/FCGI-ProcManager-0.18.tar.gz
   2. tar -xzxf FCGI-ProcManager-0.18.tar.gz
   3. cd FCGI-ProcManager-0.18
   4. perl Makefile.PL
   5. make
   6. make install
安裝 perl IO ALL 這個模塊。
apt-get install libio-all-perl
cp nginx-fcgi.txt /usr/sbin/nginx-fcgi
chmod +x /usr/sbin/nginx-fcgi
注意:要使用啟動Nginx的用戶來運行下面這個指令
我的Nginx運行用戶是www-data ,若你不確定,可以 cat /etc/nginx/nginx.conf |grep user ,可以看到結果(apt安裝)。
su www-data  /usr/sbin/nginx-fcgi -l /var/log/nginx/nginx-fcgi.log -pid /var/run/nginx-fcgi.pid -S /var/run/nginx-fcgi.sock
且保證 nginx-fcgi.sock 的許可權為nginx和nagios可讀、寫、執行的,我當初就卡在這裡,瞎折騰了17個小時。
如果執行上面的指令提示許可權不足的問題,就把數據放在/tmp 這個目錄。這樣做:
     使用 root 用戶:chown www-data:www-data /tmp
                  chmod -R 777 /tmp        ,把這個目錄的許可權設成777是因為 nagios 和nginx都要讀取 nginx-fcgi.sock,或者你可以把運行  nagios和nginx的用戶加在一個組,並chmod -R 770 /tmp 也可以 。
     再次 su www-data  /usr/sbin/nginx-fcgi -l /tmp/nginx-fcgi.log -pid /tmp/nginx-fcgi.pid -S /tmp/nginx-fcgi.sock
      
我們需要的nginx 的配置文件有
/etc/nginx/sites-available/nginx.conf  
/etc/nginx/sites-available/default
/etc/nginx/conf.d/nagios.conf
nginx.conf內容:
user www-data;
worker_processes  3;
error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;
events {
    worker_connections  3;
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
     access_log /var/log/nginx/access.log;
    sendfile        on;
    keepalive_timeout  65;
    tcp_nodelay        on;
    gzip  on;
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
##參數很少,但我只跑一個nagios的web。


/etc/nginx/conf.d/nagios.conf 內容
server
       {
               listen       80;
               server_name  www.nagios-t.com;          #虛擬主機
               index index.php index.html index.htm;
               root  /usr/local/nagios/share;
               location ~ .*\.php?$
               {
                        gzip off;
                       include /etc/nginx/conf.d/enable_php5.conf;
                        fastcgi_pass  127.0.0.1:9000;    #這裡是解析php cgi的腳本介面。
                        fastcgi_index index.php;
               }
                location /nagios/
               {
                gzip off;
                alias /usr/local/nagios/share/;            #nginx中的別名設置,相當於apache中的虛擬目錄
                index index.html index.htm index.php;

location ~ \.cgi$ {
rewrite ^/nagios/cgi-bin/(.*)\.cgi /$1.cgi break;   #這個我解釋不了 :(
fastcgi_pass unix:/tmp/nginx-fcgi;                  #解析perl cgi 所用的sock介面。
fastcgi_index index.cgi;
fastcgi_param SCRIPT_FILENAME /usr/local/nagios/sbin$fastcgi_script_name; #要解析的腳本位置
fastcgi_param HTTP_ACCEPT_LANGUAGE en_US;
include /etc/nginx/fastcgi_params;
}###############################################綠色字體部分為解析perl cgi腳本的設置。
location ~ \.pl$ {
               fastcgi_pass  unix:/tmp/nginx-fcgi.sock;
               fastcgi_index index.pl;
               fastcgi_param SCRIPT_FILENAME  /usr/local/nagios/sbin$fastcgi_script_name;
               include /etc/nginx/fastcgi_params;
           }

/etc/nginx/conf.d/enable_php5.conf; 內容
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;
fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;
fastcgi_param  REDIRECT_STATUS    200;

最後,把 /usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 10 -u www -f /usr/bin/php-cgi
        su www-data  /usr/sbin/nginx-fcgi -l /tmp/nginx-fcgi.log -pid /tmp/nginx-fcgi.pid -S /tmp/nginx-fcgi.sock
      放入/etc/rc.local
重啟nagios,nginx 。
###################################################################
如果要求nginx下所有的站點都可以支持 perl 、php 的cgi ,那麼可以把下面的代碼加入 /etc/nginx/sites-available/default 中 。

               location ~ .*\.php?$
               {
                        gzip off;
                       include /etc/nginx/conf.d/enable_php5.conf;
                        fastcgi_pass  127.0.0.1:9000;    #這裡是解析php cgi的腳本介面。
                        fastcgi_index index.php;
               }

location ~ \.cgi$ {
rewrite ^/nagios/cgi-bin/(.*)\.cgi /$1.cgi break;   
fastcgi_pass unix:/tmp/nginx-fcgi;                 
fastcgi_index index.cgi;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; #要解析的腳本位置
fastcgi_param HTTP_ACCEPT_LANGUAGE en_US;
include /etc/nginx/fastcgi_params;
location ~ \.pl$ {
               fastcgi_pass  unix:/tmp/nginx-fcgi.sock;
               fastcgi_index index.pl;
               fastcgi_param SCRIPT_FILENAME  /usr/local/nagios/sbin$fastcgi_script_name;
               include /etc/nginx/fastcgi_params;
               
           }

並把 /usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 10 -u www -f /usr/bin/php-cgi
        su www-data  /usr/sbin/nginx-fcgi -l /tmp/nginx-fcgi.log -pid /tmp/nginx-fcgi.pid -S /tmp/nginx-fcgi.sock
      放入/etc/rc.local
如果排版有問題,請看附件

有問題亦可聯繫 nagios.free@gmail.com

[ 本帖最後由 357202171 於 2009-7-19 22:17 編輯 ]
《解決方案》

好文,比較有用。我來支持




[火星人 via ] nginx+nagios3.1.2支持perl cgi ,php cgi 簡要配置已經有237次圍觀

http://www.coctec.com/docs/service/show-post-180.html