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
如果排版有問題,請看附件
有問題亦可聯繫
[email protected] [ 本帖最後由 357202171 於 2009-7-19 22:17 編輯 ]
《解決方案》
好文,比較有用。我來支持