a毛片毛费观看-a毛片在线-a毛片在线观看-a毛片在线免费观看-国产成人综合洲欧美在线-国产成人综合高清在线观看

始創于2000年 股票代碼:831685
咨詢熱線:0371-60135900 注冊有禮 登錄
  • 掛牌上市企業
  • 60秒人工響應
  • 99.99%連通率
  • 7*24h人工
  • 故障100倍補償
您的位置: 網站首頁 > 幫助中心>文章內容

配置 Nginx 支持 CGI

發布時間:  2012/9/11 13:01:30
安裝所需的 perl fcgi 模塊:

apt-get install libfcgi-perl libfcgi-procmanager-perl

用 perl 寫一個 daemon 程序來處理 cgi 文件:

vi /usr/local/bin/cgiwrap-fcgi.pl

#!/usr/bin/perl -w

use FCGI;

use Socket;

use FCGI::ProcManager;

sub shutdown { FCGI::CloseSocket($socket); exit; }

sub restart { FCGI::CloseSocket($socket); &main; }

use sigtrap 'handler', \&shutdown, 'normal-signals';

use sigtrap 'handler', \&restart, 'HUP';

require 'syscall.ph';

use POSIX qw(setsid);

#&daemonize; we don't daemonize when running under runsv

#this keeps the program alive or something after exec'ing perl scripts

END() { }

BEGIN() { }

{

no warnings;

*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/nginx/perl_cgi-dispatch.sock", 10 ); #use UNIX sockets - user running this script. must have w access to the 'nginx' folder!!

#foreach $item (keys %ENV) { delete $ENV{$item}; }

$proc_manager = FCGI::ProcManager->new( {n_processes => 5} );

$socket = FCGI::OpenSocket( "127.0.0.1:8999", 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,

&FCGI::FAIL_ACCEPT_ON_INTR );

$proc_manager->pm_manage();

if ($request) { request_loop() }

FCGI::CloseSocket($socket);

}

sub request_loop {

while ( $request->Accept() >= 0 ) {

$proc_manager->pm_pre_dispatch();

#processing any STDIN input from WebServer (for CGI-POST actions)

$stdin_passthrough = '';

{ no warnings; $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 );

pipe( PARENT_ERR, CHILD_ERR );

my $pid = open( CHILD_O, "-|" );

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;

}

$oldfh = select(PARENT_ERR);

$| = 1;

select(CHILD_O);

$| = 1;

select($oldfh);

if ( $pid > 0 ) {

close(CHILD_RD);

close(CHILD_ERR);

print PARENT_WR $stdin_passthrough;

close(PARENT_WR);

$rin = $rout = $ein = $eout = '';

vec( $rin, fileno(CHILD_O), 1 ) = 1;

vec( $rin, fileno(PARENT_ERR), 1 ) = 1;

$ein = $rin;

$nfound = 0;

while ( $nfound =

select( $rout = $rin, undef, $ein = $eout, 10 ) )

{

die "$!" unless $nfound != -1;

$r1 = vec( $rout, fileno(PARENT_ERR), 1 ) == 1;

$r2 = vec( $rout, fileno(CHILD_O), 1 ) == 1;

$e1 = vec( $eout, fileno(PARENT_ERR), 1 ) == 1;

$e2 = vec( $eout, fileno(CHILD_O), 1 ) == 1;

if ($r1) {

while ( $bytes = read( PARENT_ERR, $errbytes, 4096 ) ) {

print STDERR $errbytes;

}

if ($!) {

$err = $!;

die $!;

vec( $rin, fileno(PARENT_ERR), 1 ) = 0

unless ( $err == EINTR or $err == EAGAIN );

}

}

if ($r2) {

while ( $bytes = read( CHILD_O, $s, 4096 ) ) {

print $s;

}

if ( !defined($bytes) ) {

$err = $!;

die $!;

vec( $rin, fileno(CHILD_O), 1 ) = 0

unless ( $err == EINTR or $err == EAGAIN );

}

}

last if ( $e1 || $e2 );

}

close CHILD_RD;

close PARENT_ERR;

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(PARENT_ERR);

close(STDIN);

close(STDERR);

#fcntl(CHILD_RD, F_DUPFD, 0);

syscall( &SYS_dup2, fileno(CHILD_RD), 0 );

syscall( &SYS_dup2, fileno(CHILD_ERR), 2 );

#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";

}

}

}
注意文件中的這兩行:

#$socket = FCGI::OpenSocket( "127.0.0.1:8999", 10 );

#$socket = FCGI::OpenSocket( "/var/run/nginx/perl_cgi-dispatch.sock", 10 );

這兩行都表示監聽來自 perl CGI 的請求。

其中 perl_cgi-dispatch.sock 表示使用 unix socket 響應 CGI 請求。

127.0.0.1:8999 表示使用 TCP/IP 協議響應請求。

需要使用哪種方式就在下面的 FCGI::OpenSocket 中填入相對應的內容。

啟動:

chmod +x /usr/local/bin/cgiwrap-fcgi.pl

/usr/local/bin/cgiwrap-fcgi.pl > /dev/null 2>&1 &

配置 Nginx 的 location 處理 cgi 文件:

location ~ .*\.cgi$ {

fastcgi_pass 127.0.0.1:8999;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include fastcgi_params;

}

測試:

在 web 的根目錄下創建一個 cgi 文件:

vi test.cgi

#!/usr/bin/perl

print "Content-type: text/html\n\n";

print "Hello, world.";

文件需要有可執行權限:

chmod +x test.cgi

訪問 http://www.domain.com/test.cgi 看看有沒有輸出。

cgiwrap-fcgi.pl 隨 nginx 一起啟動/關閉:

修改 nginx 啟動腳本:

在 start 段加入:

/usr/local/bin/cgiwrap-fcgi.pl > /dev/null 2>&1 &

在 stop 段加入:

PID=`/bin/netstat -npl | grep "127.0.0.1:8999" | awk '{print $7}' | cut -d "/" -f 1`

while [ -n "$PID" ]

do

kill -9 "$PID"

PID=`/bin/netstat -npl | grep "127.0.0.1:8999" | awk '{print $7}' | cut -d "/" -f 1`

done

本文出自:億恩科技【www.ibaoshan.net】

服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]

  • 您可能在找
  • 億恩北京公司:
  • 經營性ICP/ISP證:京B2-20150015
  • 億恩鄭州公司:
  • 經營性ICP/ISP/IDC證:豫B1.B2-20060070
  • 億恩南昌公司:
  • 經營性ICP/ISP證:贛B2-20080012
  • 服務器/云主機 24小時售后服務電話:0371-60135900
  • 虛擬主機/智能建站 24小時售后服務電話:0371-60135900
  • 專注服務器托管17年
    掃掃關注-微信公眾號
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權所有  地址:鄭州市高新區翠竹街1號總部企業基地億恩大廈  法律顧問:河南亞太人律師事務所郝建鋒、杜慧月律師   京公網安備41019702002023號
      0
     
     
     
     

    0371-60135900
    7*24小時客服服務熱線

     
     
    亚洲成AⅤ人在线观看无码| 国产精品国产三级国快看 | 色综合久久久久综合一本到桃花网| 久久97超碰色中文字幕总站| 超碰色偷偷男人的天堂| 亚洲熟妇人av一区二区三区| 色诱久久久久综合网YWWW| 久久久久久久精品免费| 夫妇联欢会回不去的夜晚9集| 野花视频在线观看免费高清版| 天堂AⅤ大芭蕉伊人AV| 妺妺窝人体色WWW在线直播| 国产亚洲AV片在线观看播放按摩| MACBOOKPRO免费观看| 亚洲欧洲日产V一个人免费观看视频WWW高清| 日本丰满少妇精品| 久久久久久精品免费看SSS| 国产成人午夜高潮毛片| 97SE狠狠狠狠狼亚洲综合网| 亚洲AV无码一区二区乱孑伦AS | 日韩无码视频一区二区三区| 久久久精品人妻一区二区三区四 | 无码中文字幕日韩专区| 欧美老熟妇性BBBBBXXXX| 好男人资源在线观看好| 车内挺进尤物少妇紧窄| 一二三四在线视频社区3| 无码专区6080YY电影| 欧美乱熟妇XXXX白浆| 精品一区二区三区无码视频| 高雅人妻被迫沦为玩物电影BD| 10岁幼儿TREE小学生| 亚洲成AV人片无码不卡| 色噜噜影院狠狠狠噜| 老公带朋友来家里C我怎么办| 国产精品无码免费专区午夜| YY8098影视理论无码专区| 亚洲无人区一码二码三码区别| 挺进去岳就不挣扎了在线观看 | 国产AV日韩AⅤ亚洲AV无码馆| 2019四虎影视最新在线| 亚洲国产AⅤ精品一区二区30P| 日系女生裸妆素颜| 男j插女p无遮挡100%| 精品国产成人国产在线观看| 公与憩止痒小说400章| 7M精品福利视频导航| 亚洲欧美综合精品成人网站| 特级做A爰片毛片免费看无码| 欧美极品少妇XXXXⅩ| 久久精品无码免费不卡| 国产精品无码一区二区在线观一| ZOOM另一类ZZO0| 伊在人亚洲香蕉精品区麻豆| 亚洲AV无码成人影院一尤物区 | 亚洲AV永久无码老湿机男人网| 日日噜噜夜夜狠狠久久无码区 | 6080YY无码中文字幕| 亚洲乱码日产精品BD在线下载| 他一边曰一边吃我奶小说免看| 欧美性大战XXXXX久久久√| 久久久久久久久蜜桃| 国产午夜亚洲精品午夜鲁丝片 | 亚洲AV之男人的天堂| 色欲国产麻豆一精品一AV一免费| 女神被啪进深处娇喘在线观看| 久久99精品久久久久久久清纯| 国产精品亚洲VA在线| 成人免费无码大片A毛片抽搐| 中文字幕亚洲综合小综合在线| 亚洲精品无码久久久久秋霞| 无码A级毛片免费视频内谢| 人禽伦免费交视频播放| 免费A级毛片在线播放| 精品无人区卡卡卡卡卡二卡三乱码 | 亚洲AV综合A国产AV中文| 熟妇人妻一区二区三区四区| 屁屁影院最新发布页CCYY| 老熟妇高潮一区二区高清视频| 狠狠色噜噜狠狠狠狠97俺也去| 国产成人无码精品一区二区三区 | 制服 丝袜 有码 无码 中文 | 欧美精品亚洲日韩AⅤ| 久久综合色一综合色88| 好疼太大了太粗太长了视频| 国产极品粉嫩馒头一线天AV| 成人精品无码一区二区三区| ASS黑森林PIC| 夜夜高潮夜夜爽夜夜爱爱| 亚洲AV无码天堂一区二区三区| 水蜜桃AV无码一区二区| 日本VA欧美VA精品发布| 欧美A级情欲片在线观看免费| 久久人人爽人人爽人人片AV不| 好硬好大好爽18禁免费看男男| 国产精品久久久久7777| 大象大象视频WWW在线观看 | 东京热无码人妻一区二区AV| FREE性满足HD| 中文字幕一区二区精品区| 亚洲欲色欲色XXXXX在线| 亚洲AV永久无码精品无码流畅| 无码日韩人妻精品久久蜜桃| 色噜噜狠狠色综合AV妖精| 欧美在线视频一区二区| 免费看无码自慰一区二区| 久久人妻无码中文字幕| 精品午夜人成一区| 好了AV第四综合无码久久| 国产精品色视频ⅩXXX| 国产99在线 | 中文| 成人无码区免费AⅤ片| YW亚洲AV无码乱码在线观看| 99999久久久久久亚洲| 中文字幕大香视频蕉| 野花免费观看日本电视剧| 亚洲精品卡一卡三卡四卡乱码| 亚洲AV成人在线播放| 无码日韩人妻AV一区二区三区| 熟妇人妻久久中文字幕老熟妇| 日日噜噜夜夜狠狠久久无码区| 人妻系列AV无码专区| 朋友人妻少妇精品系列| 欧美黑人又大又粗XXXXX| 男生坤坤放在女生坤坤里开元棋 | 日本Α片无遮挡在线观看| 欧美孕妇XXXXBBBB| 欧美成年黄网站色视频| 免费观看人成影片| 久久婷婷人人澡人爽人人喊 | YSL千人千色T9T9T90| chinese人妻无码人妻| 97精品人妻一区二区三区香蕉| 亚洲无线码高清在线观看| 性无码免费一区二区三区屯线| 忘忧草在线影院WWW神马| 亚洲熟女少妇一区二区| 亚洲AV无码成H人动漫在线观看| 小S货又想挨C了叫大声点| 无码内射中文字幕岛国片| 无码AV蜜臀AⅤ色欲在线观看| 天堂8在/线中文在线资源8| 色窝窝AV资源网| 如狼似虎的熟妇14P| 日韩精品无码AV中文无码版| 日本工口里番H彩色无遮挡全彩| 区产品乱码芒果精品P站| 欧美在线视频二区| 青青草无码精品伊人久久| 强行糟蹋人妻HD中文字幕| 欧洲无人区天空码头IV在哪一本| 欧美午夜精品久久久久免费视 | 国产成本人片免费AV| 国产白浆喷水在线视频| 国产V亚洲V天堂无码久久久| 国产成人啪精品视频网站午夜| 高潮白浆潮喷正在播放| 丰满的少妇愉情HD高清果冻传媒| 丰满老熟妇好大BBBBB四P| 高清精品一区二区三区| 国产成人国拍亚洲精品| 国产精品99久久99久久久动漫| 国产精品亚洲А∨无码播放不卡 | 精品人人妻人人爽D∨D| 九九真实偷窥短视频| 久久久久成人片免费观看R| 久久久亚洲欧洲日产国码AⅤ| 久久久噜噜噜WWW成人网| 巨大黑人极品VIDEOS精品| 麻花传媒MD0076在线入口| 免费人妻AV无码专区| 欧美XXXX色视频在线观看| 欧美日韩在线亚洲一区蜜芽| 人妻少妇精品一区二区三区| 日韩v亚洲v欧美v精品综合| 少妇高潮惨叫久久久久久| 偷窥熟女大屁股对白视频| 小13箩利洗澡无码免费视频| 亚洲 国产 制服 丝袜 一区| 亚洲av中文无码| 亚洲另类精品无码专区| 亚洲中文字幕无码爆乳| 伊人久久大香线蕉亚洲五月天| 中文字幕无码专区人妻系列| 99久久免费国产精品| 拔萝卜全程不该盖被子怎么办| 成人妇女免费播放久久久| 国产AV电影区二区三区曰曰骚网| 国产精品久久久久7777按摩| 国产曰的好深好爽免费视频| 精品人人妻人人爽D∨D| 久久亚洲精品成人AV无码网站 | 97久久精品人妻人人搡人人玩| JJZZJJZZ高潮喷水妇女| 成人毛片无码一区二区| 国产成人久久精品一区二区三区| 国产免费无遮挡吸乳视频在线观看| 黑人双人RAPPER剧情介绍| 久久久久久一区国产精品| 男女爽爽午夜18禁影院免费|