真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網站制作重慶分公司

Nginx動態(tài)化舉例分析

這篇文章主要講解了“Nginx動態(tài)化舉例分析”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Nginx動態(tài)化舉例分析”吧!

目前創(chuàng)新互聯(lián)公司已為數(shù)千家的企業(yè)提供了網站建設、域名、網站空間、成都網站托管、企業(yè)網站設計、江油網站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

環(huán)境:

CentOS 6.4 ip:192.168.1.113 域名:www.sunsky.com(server和client都通過hosts文件解析) nginx-1.2.9 編譯安裝,路徑/usr/local/nginx,服務開啟狀態(tài) 日志記錄格式為nginx默認的,切勿更改,否則會造成awstats無法分析日志。 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; awstats-7.2.tar.gz CPAN-2.00.tar.gz FCGI-0.74.tar.gz FCGI-ProcManager-0.24.tar.gz 必須有perl-devel,不然無法編譯FCGI。

一、日志自動切割

對于nginx的日志切割,由于沒有像apache一樣去用cronolog工具,這里我們就寫一個腳本,讓它可以在每天00:01自動執(zhí)行,切割昨天的日志(交由awstats分析),壓縮前天的日志(壓縮日志可減小存儲空間,為防止awstats沒有分析完就被壓縮,所以只壓縮前天的日志)。

vim /server/scripts/cut_nginx_log.sh

輸入以下內容:

#!/bin/sh yesterday=`date -d "yesterday" +"%Y%m%d"` before_yesterday=`date -d "-2 day" +"%Y%m%d"` Nginx_Dir="/usr/local/nginx" Nginx_logs="/app/logs" Log_Name="www_access" cd /tmp [ -d $Nginx_Logs ] && cd $Nginx_logs || exit 1 [ -f $Log_Name.log ] && /bin/mv $Log_Name.log ${Log_Name}_${yesterday}.log || exit 1 if [ $? -eq 0 -a -f $Nginx_Dir/logs/nginx.pid ] then kill -USR1 `cat $Nginx_Dir/logs/nginx.pid` fi [ -f  ${Log_Name}_${before_yesterday}.log ] && /usr/bin/gzip ${Log_Name}_${before_yesterday}.log|| exit 1

執(zhí)行crontab -e將該腳本加入定時任務中

1 0 * * * /bin/sh /server/scripts/cut_nginx_log.sh >/dev/null 2>&1

這樣每天凌晨00:01就能自動實現(xiàn)日志的切割,壓縮等功能了。

因為本次實驗下的nginx此時已經有日志了,另外為了后文awstats能對切割過的日志進行分析,所以這里我們要運行一下此腳本,來將現(xiàn)有日志進行切割生成昨天的日志方便后文操作。

/bin/sh /server/scripts/cut_nginx_log.sh >/dev/null 2>&1

二、配置FCGI

1、安裝CPAN

wget http://search.cpan.org/CPAN/authors/id/A/AN/ANDK/CPAN-2.00.tar.gz tar zxf CPAN-2.00.tar.gz cd CPAN-2.00 perl Makefile.PL make && make install

2、安裝FCGI和FCGI::ProcManager

wget http://search.cpan.org/CPAN/authors/id/F/FL/FLORA/FCGI-0.74.tar.gz tar zxf FCGI-0.74.tar.gz cd FCGI-0.74 第一種安裝方法:perl -MCPAN -e 'install FCGI' 第二種安裝方法:perl Makefile.PL               make&&make install wget http://search.cpan.org/CPAN/authors/id/B/BO/BOBTFISH/FCGI-ProcManager-0.24.tar.gz tar zxf FCGI-ProcManager-0.24.tar.gz cd FCGI-ProcManager-0.24 第一種安裝方法:perl -MCPAN -e 'install FCGI::ProcManager' 第二種安裝方法:perl Makefile.PL               make&&make install

在執(zhí)行第一種安裝方法的時候,一定是全程自動滾動下來提示OK的。如果出現(xiàn)提示你輸入yes之類的,你需要按提示操作完之后,再運行第二次直到全程自動滾動下來提示OK才為完成安裝?;蛘吣憔陀玫诙N方法來執(zhí)行安裝。

3、創(chuàng)建FCGI啟動文件

vi /usr/local/nginx/sbin/fcgi       #此處按個人習慣命名 #!/usr/bin/perl use FCGI; #perl -MCPAN -e 'install FCGI' use Socket; use POSIX qw(setsid); #use Fcntl; 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 ); $socket = FCGI::OpenSocket( "/usr/local/nginx/fastcgi_temp/perl_cgi-dispatch.sock", 10 ); #use UNIX sockets - user running this script must have w access to the 'nginx' folder!! $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 - 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 = ) { 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 exist or is not executable by this process.\n";        }    } }

創(chuàng)建完成后,需要賦予fcgi執(zhí)行權限:

chmod 755 /usr/local/nginx/sbin/fcgi

啟動FPM(FastCGI 進程管理器)

perl /usr/local/nginx/sbin/fcgi >/dev/null 2>$1

在這里,Nginx需要對fcgi生成的/usr/local/nginx/fastcgi_temp/perl_cgi-dispatch.sock有讀寫權限,否則會報502錯誤。

三、Awstats的安裝與配置

1、部署awstats

首先我們要下載awstats軟件包,并將其放在常規(guī)目錄(/usr/local)下:

wget http://awstats.sourceforge.net/files/awstats-7.2.tar.gz tar zxf awstats-7.2.tar.gz mv awstats-7.2 /usr/local/awstats

由于wget下載下來的包中權限是非root的,所以這里要修改權限,否則稍后*.pl將無法運行:

chown -R root.root /usr/local/awstats chmod +x /usr/local/awstats/tools/*.pl chmod +x /usr/local/awstats/wwwroot/cgi-bin/*.pl

接下來我們要執(zhí)行awstats/tools下的awstats_configure.pl配置向導,用來生成awstats的配置文件,awstats配置文件的命名規(guī)則是awstats.website.conf

cd /usr/local/awstats/tools/ ./awstats_configure.pl

此時會出現(xiàn)如下提示:

----- AWStats awstats_configure 1.0 (build 1.9) (c) Laurent Destailleur ----- This tool will help you to configure AWStats to analyze statistics for one web server. You can try to use it to let it do all that is possible in AWStats setup, however following the step by step manual setup documentation (docs/index.html) is often a better idea. Above all if: - You are not an administrator user, - You want to analyze downloaded log files without web server, - You want to analyze mail or ftp log files instead of web log files, - You need to analyze load balanced servers log files, - You want to 'understand' all possible ways to use AWStats... Read the AWStats documentation (docs/index.html). -----> Running OS detected: Linux, BSD or Unix -----> Check for web server install Enter full config file path of your Web server. Example: /etc/httpd/httpd.conf Example: /usr/local/apache2/conf/httpd.conf Example: c:\Program files\apache group\apache\conf\httpd.conf Config file path ('none' to skip web server setup): > none      #這里讓填寫網頁

為了保持nginx.conf主配置文件更加整潔干凈,所以我們將fastcgi_param的一系列參數(shù)添加到/usr/local/nginx/conf/fastcgi_params文件的最頂部,然后在nginx.conf里面調用這個文件即可。

vi /usr/local/nginx/conf/fastcgi_params fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 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 GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE    nginx; 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 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_read_timeout 60;

針對上面的加密,由于nginx沒有好的加密認證工具,需要借助apache的htpasswd來實現(xiàn)加密認證功能:

htpasswd -c -m /usr/local/nginx/htpasswd.pass sunskyadmin      #用戶名為sunskyadmin

配置完畢之后,檢查nginx語法,然后優(yōu)雅重啟之后,用游覽器訪問http://www.sunsky.com/cgi-bin/awstats.pl?config=www.sunsky.com,輸入賬號密碼之后即可查看統(tǒng)計信息了。

Nginx動態(tài)化舉例分析

Nginx動態(tài)化舉例分析

至此,awstats已經可以實現(xiàn)對Nginx的日志統(tǒng)計,動態(tài)化安全訪問及來訪ip的地址位置顯示等功能了。

五、配置awstats自動運行

為了讓整個日志的統(tǒng)計過程可以實現(xiàn)自動化,將awstats.sh腳本加入crontab定時任務中去,此時結合上面的定時切割任務,我們的crontab里面會有多出來兩條定時任務。

1 0 * * * /bin/sh /server/scripts/cut_nginx_log.sh >/dev/null 2>&1 0 1 * * * /bin/sh /server/scripts/awstats_up.sh >/dev/null 2>&1

感謝各位的閱讀,以上就是“Nginx動態(tài)化舉例分析”的內容了,經過本文的學習后,相信大家對Nginx動態(tài)化舉例分析這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關知識點的文章,歡迎關注!


網頁標題:Nginx動態(tài)化舉例分析
文章URL:
http://weahome.cn/article/phodio.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部