Nginx通過內建的Perl模組執行Perl程式

nginx_web發表於2012-06-10

 

 

    通過使用該模組Nginx伺服器可以直接在Nginx內部執行Perl,或者是通過SSI來呼叫Perl

 

    該模組在預設安裝是沒有別安裝,因此要想安裝該模組就需要在編譯是指定--with-http_perl_module選項,同時需要Nginx伺服器所在的系統裝有Perl 5.6.1及以上的版本。

 

    然而,需要注意的是,該模組是一個實驗性模組,因此可能會存在一些bug,同時在使用給該模組上要注意以下兩點:

 

n         如果Perl模組執行了延時的操作,例如,DNS查詢,資料庫查詢,等等,那麼執行該Perl指令碼的worker程式將會一直等待該程式的完成。因此,在使用嵌入式的Perl指令碼時,應該儘可能的簡短,而且要儘快的執行操作。

 

n         如果使用'kill -HUP '方式重新載入Nginx的配置檔案,那麼可能會導致Nginx發生記憶體溢位。

 

示例配置

 

http {

  perl_modules  perl/lib;

  perl_require  hello.pm;

 

  perl_set  $msie6  '

  sub {

    my $r = shift;

    my $ua = $r->header_in("User-Agent");

    return "" if $ua =~ /Opera/;

    return "1" if $ua =~ / MSIE [6-9] \.\d+/;

    return "";

  }

 ';

 

  server {

    location / {

      perl  hello::handler;

    }

  }

}

   

    perl/lib/hello.pm:

 

package hello;

use nginx;

 

sub handler {

  my $r = shift;

  $r->send_http_header("text/html");

  return OK if $r->header_only;

 

  $r->print("hello!\n
");

  $r->rflush;

 

  if (-f $r->filename or -d _) {

    $r->print($r->uri, " exists!\n");

  }

 

  return OK;

}

 

1;

__END__

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27043155/viewspace-732402/,如需轉載,請註明出處,否則將追究法律責任。

相關文章