write down,forget
  • adidaseqt
  • eqtturbored
  • eqtsupport9317
  • eqtsupport
  • 9317adidas
  • adidaseqtboost9317
  • eqtsupport93
  • 9317eqt
  • eqt support 9317 adv
  • support 9317 adv
  • eqtadv
  • eqt9317
  • eqtadv9317
  • support93
  • originalseqt
  • adidas eqt
  • eqt support 9317
  • eqt support
  • eqt adv
  • eqt 9317
  • nginx下fastcgi方式运行Perl程序

    <Category: Linux> 查看评论

    见鬼了,这篇文章又丢失了,vps的数据难道回滚了,靠。
    perl
    1.安装FCGI:

    2.安装FCGI-ProcManager

    3.编辑两个文件

    cd /usr/local//
      ls
      cd sbin/
      ls
      vi cgiwrap-fcgi.pl
      chmod +x cgiwrap-fcgi.pl

    4.cgiwrap-fcgi.pl文件内容
    #!/usr/bin/ -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 “fakeexitnrc=” . 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( “/var/run/fcgi.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,
            &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/plainrnrn);
                    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/plainrnrn);
                print
    “Error: No such CGI app – $req_params{SCRIPT_FILENAME} may not exist or is not executable by this process.n;
            }
        }
    }

    运行脚本


    运行下面的命令来查看perl是否运行

    5.添加文件

    6.Nginx配置

    fascgi_params内容如下:

    本文来自: nginx下fastcgi方式运行Perl程序

    
    eqt support adidas eqt support 93 primeknit og colorway ba7506 adidas eqt running 93 updated with primeknit construction adidas eqt boost 93 17 white turbo red adidas eqt support 9317 white turbo red adidas eqt support 93 17 adidas eqt support 9317 adidas eqt support 9317 turbo red releases tomorrow adidas originals adidas eqt tactile green pack adidas eqt tactile green pack adidas eqt light green pack womens adidas eqt light green pack coming soon adidas eqt milled leather pack release date adidas originals eqt milled leather pack adidas eqt support ultra boost turbo red white adidas adv support burnt orange grey where to buy the adidas eqt support 9317 turbo red adidas eqt boost 91 16 turbo red adidas eqt support 93 turbo red adidas eqt support 9317 white turbo red available now