FAQ

Page Discussion Edit History

RuEmbeddedPerlModule

(Redirected from NginxRuEmbeddedPerlModule)

Contents

[edit] ngx_http_perl_module

袦芯写褍谢褜 ngx_http_perl_module 锌芯蟹胁芯谢褟械褌 褉邪斜芯褌邪褌褜 褋芯 胁褋褌褉芯械薪薪褘屑 胁 nginx perl'芯屑: 写械谢邪褌褜 芯斜褉邪斜芯褌褔懈泻懈 location 懈 锌械褉械屑械薪薪芯泄 懈 胁褋褌邪胁谢褟褌褜 胁褘蟹芯胁褘 perl'邪 胁 SSI. 袩芯 褍屑芯谢褔邪薪懈褞 屑芯写褍谢褜 薪械 褋芯斜懈褉邪械褌褋褟, 薪褍卸薪芯 褉邪蟹褉械褕懈褌褜 械谐芯 褋斜芯褉泻褍 锌褉懈 泻芯薪褎懈谐褍褉懈褉芯胁邪薪懈懈 锌邪褉邪屑械褌褉芯屑 --with-http_perl_module. 袛谢褟 褋斜芯褉泻懈 薪械芯斜褏芯写懈屑 perl 胁械褉褋懈懈 5.6.1 懈 胁褘褕械, 懈 泻芯屑锌懈谢褟褌芯褉 C, 褋芯胁屑械褋褌懈屑褘泄 褋 褌械屑, 泻芯褌芯褉褘屑 斜褘谢 褋芯斜褉邪薪 perl. 小芯写械褉卸邪薪懈械 袠蟹胁械褋褌薪褘械 锌褉芯斜谢械屑褘 袩褉懈屑械褉 泻芯薪褎懈谐褍褉邪褑懈懈

[edit] 袛懈褉械泻褌懈胁褘

  • [#perl perl]
  • [#perl_modules perl_modules]
  • [#perl_require perl_require]
  • [#perl_set perl_set]

袙褘蟹芯胁 perl'邪 懈蟹 SSI 袦械褌芯写褘 芯斜褗械泻褌邪 蟹邪锌褉芯褋邪 $r 袠蟹胁械褋褌薪褘械 锌褉芯斜谢械屑褘

袦芯写褍谢褜 褝泻褋锌械褉懈屑械薪褌邪谢褜薪褘泄, 锌芯褝褌芯屑褍 胁芯蟹屑芯卸薪芯 胁褋褢.

袙芯蟹屑芯卸薪芯, 芯褋薪芯胁薪芯泄 锌褉芯褑械褋褋, 邪 胁褋谢械写 蟹邪 薪懈屑 懈 褉邪斜芯褔懈械 锌褉芯褑械褋褋褘, 斜褍写械褌 褍胁械谢懈褔懈胁邪褌褜褋褟 胁 褉邪蟹屑械褉邪褏 锌褉懈 泻邪卸写芯泄 锌械褉械泻芯薪褎懈谐褍褉邪褑懈懈. 袣芯谐写邪 芯褋薪芯胁薪芯泄 锌褉芯褑械褋褋 胁褘褉邪褋褌械褌 写芯 薪械锌褉懈械屑谢懈屑褘褏 褉邪蟹屑械褉芯胁, 屑芯卸薪芯 胁芯褋锌芯谢褜蟹芯胁邪褌褜褋褟 锌褉芯褑械写褍褉芯泄 芯斜薪芯胁谢械薪懈褟 褋械褉胁械褉邪 薪邪 谢械褌褍, 薪械 屑械薪褟褟 锌褉懈 褝褌芯屑 褋邪屑 懈褋锌芯谢薪褟械屑褘泄 褎邪泄谢.

袝褋谢懈 perl'芯胁褘泄 屑芯写褍谢褜 胁褘锌芯谢薪褟械褌 写谢懈褌械谢褜薪褍褞 芯锌械褉邪褑懈褞, 薪邪锌褉懈屑械褉, 芯锌褉械写械谢褟械褌 邪写褉械褋 锌芯 懈屑械薪懈, 褋芯械写懈薪褟械褌褋褟 褋 写褉褍谐懈屑 褋械褉胁械褉芯屑, 写械谢邪械褌 蟹邪锌褉芯褋 泻 斜邪蟹械 写邪薪薪褘褏, 褌芯 薪邪 褝褌芯 胁褉械屑褟 胁褋械 芯褋褌邪谢褜薪褘械 蟹邪锌褉芯褋褘 写邪薪薪芯谐芯 褉邪斜芯褔械谐芯 锌褉芯褑械褋褋邪 薪械 斜褍写褍褌 芯斜褉邪斜邪褌褘胁邪褌褜褋褟. 袩芯褝褌芯屑褍 褉械泻芯屑械薪写褍械褌褋褟 芯谐褉邪薪懈褔懈褌褜褋褟 芯锌械褉邪褑懈褟屑懈, 胁褉械屑褟 懈褋锌芯谢薪械薪懈褟 泻芯褌芯褉褘褏 泻芯褉芯褌泻芯械 懈 锌褉械写褋泻邪蟹褍械屑芯械, 薪邪锌褉懈屑械褉, 芯斜褉邪褖械薪懈械 泻 谢芯泻邪谢褜薪芯泄 褎邪泄谢芯胁芯泄 褋懈褋褌械屑械. 袩褉懈屑械褉 泻芯薪褎懈谐褍褉邪褑懈懈

: 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<br/>");
: $r->rflush;

: if (-f $r->filename or -d _) {
: $r->print($r->uri, " exists!\n");
: }

: return OK;
: }

: 1;
: __END__

Template:Anchor

[edit] perl

syntax: perl 屑芯写褍谢褜::褎褍薪泻褑懈褟|'sub { ... }'

default: 薪械褌

context: location

袛懈褉械泻褌懈胁邪 褍褋褌邪薪邪胁谢懈胁邪械褌 芯斜褉邪斜芯褌褔懈泻 写谢褟 写邪薪薪芯谐芯 location.

Template:Anchor

[edit] perl_modules

syntax: perl_modules 锌褍褌褜

default: 薪械褌

context: http

袛懈褉械泻褌懈胁邪 蟹邪写邪褢褌 写芯锌芯谢薪懈褌械谢褜薪褘泄 锌褍褌褜 写谢褟 perl'芯胁褘褏 屑芯写褍谢械泄.

Template:Anchor

[edit] perl_require

syntax: perl_require 屑芯写褍谢褜

default: 薪械褌

context: http

袛懈褉械泻褌懈胁邪 蟹邪写邪褢褌 懈屑褟 屑芯写褍谢褟, 泻芯褌芯褉褘泄 斜褍写械褌 锌芯写谐褉褍卸邪褌褜褋褟 锌褉懈 泻邪卸写芯泄 锌械褉械泻芯薪褎懈谐褍褉邪褑懈懈. 袛懈褉械泻褌懈胁 屑芯卸械褌 斜褘褌褜 薪械褋泻芯谢褜泻芯.

Template:Anchor

[edit] perl_set

syntax: perl_set $锌械褉械屑械薪薪邪褟 屑芯写褍谢褜::褎褍薪泻褑懈褟 | 'sub { ... }'

default: 薪械褌

context: http

袛懈褉械泻褌懈胁邪 褍褋褌邪薪邪胁谢懈胁邪械褌 芯斜褉邪斜芯褌褔懈泻 锌械褉械屑械薪薪芯泄. 袙褘蟹芯胁 perl'邪 懈蟹 SSI

肖芯褉屑邪褌 泻芯屑邪薪写褘 褋谢械写褍褞褖懈泄 袦械褌芯写褘 芯斜褗械泻褌邪 蟹邪锌褉芯褋邪 $r

  • $r->args 鈥 屑械褌芯写 胁芯蟹胁褉邪褖邪械褌 邪褉谐褍屑械薪褌褘 蟹邪锌褉芯褋邪.
  • $r->filename 鈥 屑械褌芯写 胁芯蟹胁褉邪褖邪械褌 懈屑褟 褎邪泄谢邪, 褋芯芯褌胁械褌褋褌胁褍褞褖械械 URI 蟹邪锌褉芯褋邪.
  • $r->has_request_body(芯斜褉邪斜芯褌褔懈泻) 鈥 屑械褌芯写 胁芯蟹胁褉邪褖邪械褌 0, 械褋谢懈 胁 蟹邪锌褉芯褋械 薪械褌 褌械谢邪. 袝褋谢懈 卸械 褌械谢芯 蟹邪锌褉芯褋邪 械褋褌褜, 褌芯 褍褋褌邪薪邪胁谢懈胁邪械褌褋褟 褍泻邪蟹邪薪薪褘泄 芯斜褉邪斜芯褌褔懈泻 懈 胁芯蟹胁褉邪褖邪械褌褋褟 1. 袩芯 芯泻芯薪褔邪薪懈懈 锌褉懈褢屑邪 褌械谢邪 nginx 胁褘蟹芯胁械褌 褍褋褌邪薪芯胁谢械薪薪褘泄 芯斜褉邪斜芯褌褔懈泻. 袩褉懈屑械褉 懈褋锌芯谢褜蟹芯胁邪薪懈褟:
: package hello;

: use nginx;

: sub handler {
: my $r = shift;

: if ($r->request_method ne "POST") {
: return DECLINED;
: }

: if ($r->has_request_body(hello::post)) {
: return OK;
: }

: return 400;
: }

: sub post {
: my $r = shift;

: $r->send_http_header;

: $r->print("request_body: \"", $r->request_body, "\"<br/>");
: $r->print("request_body_file: \"", $r->request_body_file, "\"<br/>\n");

: return OK;
: }

: 1;

: __END__
  • $r->header_in(褋褌褉芯泻邪) 鈥 屑械褌芯写 胁芯蟹胁褉邪褖邪械褌 蟹薪邪褔械薪懈械 蟹邪写邪薪薪芯泄 褋褌褉芯泻懈 胁 蟹邪谐芯谢芯胁泻械 蟹邪锌褉芯褋邪 泻谢懈械薪褌邪.
  • $r->header_only 鈥 屑械褌芯写 芯锌褉械写械谢褟械褌, 薪褍卸薪芯 谢懈 锌械褉械写邪胁邪褌褜 泻谢懈械薪褌褍 褌芯谢褜泻芯 蟹邪谐芯谢芯胁芯泻 芯褌胁械褌邪 懈谢懈 胁械褋褜 芯褌胁械褌.
  • $r->header_out(褋褌褉芯泻邪, 蟹薪邪褔械薪懈械) 鈥 屑械褌芯写 褍褋褌邪薪邪胁谢懈胁邪械褌 蟹薪邪褔械薪懈械 写谢褟 蟹邪写邪薪薪芯泄 褋褌褉芯泻懈 胁 蟹邪谐芯谢芯胁泻械 芯褌胁械褌邪.
  • $r->internal_redirect(uri) 鈥 屑械褌芯写 写械谢邪械褌 胁薪褍褌褉械薪薪懈泄 褉械写懈褉械泻褌 薪邪 褍泻邪蟹邪薪薪褘泄 uri. 袪械写懈褉械泻褌 锌褉芯懈褋褏芯写懈褌 褍卸械 锌芯褋谢械 蟹邪胁械褉褕械薪懈褟 锌械褉谢芯胁芯谐芯 芯斜褉邪斜芯褔褌懈泻邪.
  • $r->print(褌械泻褋褌, ...) 鈥 屑械褌芯写 锌械褉械写邪褢褌 泻谢懈械薪褌褍 写邪薪薪褘械.
  • $r->request_body 鈥 屑械褌芯写 胁芯蟹胁褉邪褖邪械褌 褌械谢芯 蟹邪锌褉芯褋邪 泻谢懈械薪褌邪 锌褉懈 褍褋谢芯胁懈懈, 褔褌芯 褌械谢芯 薪械 蟹邪锌懈褋邪薪芯 胁芯 胁褉械屑械薪薪褘泄 褎邪泄谢. 袛谢褟 褌芯谐芯, 褔褌芯斜褘 褌械谢芯 蟹邪锌褉芯褋邪 泻谢懈械薪褌邪 谐邪褉邪薪褌懈褉芯胁邪薪芯 薪邪褏芯写懈谢芯褋褜 胁 锌邪屑褟褌懈, 薪褍卸薪芯 芯谐褉邪薪懈褔懈褌褜 械谐芯 褉邪蟹屑械褉 褋 锌芯屑芯褖褜褞 client_max_body_size 懈 蟹邪写邪褌褜 写芯褋褌邪褌芯褔薪芯泄 褉邪蟹屑械褉 写谢褟 斜褍褎械褉邪 client_body_buffer_size.
  • $r->request_body_file 鈥 屑械褌芯写 胁芯蟹胁褉邪褖邪械褌 懈屑褟 褎邪泄谢邪, 胁 泻芯褌芯褉芯屑 褏褉邪薪懈褌褋褟 褌械谢芯 蟹邪锌褉芯褋邪 泻谢懈械薪褌邪. 袩芯 蟹邪胁械褉褕械薪懈褞 褉邪斜芯褌褘 褎邪泄谢 薪械芯斜褏芯写懈屑芯 褍写邪谢懈褌褜. 袛谢褟 褌芯谐芯, 褔褌芯斜褘 褌械谢芯 蟹邪锌褉芯褋邪 泻谢懈械薪褌邪 胁褋械谐写邪 蟹邪锌懈褋褘胁邪谢芯褋褜 胁 褎邪泄谢, 薪褍卸薪芯 褍泻邪蟹邪褌褜 client_body_in_file_only on.
  • $r->request_method 鈥 屑械褌芯写 胁芯蟹胁褉邪褖邪械褌 HTTP 屑械褌芯写 蟹邪锌褉芯褋邪 泻谢懈械薪褌邪.
  • $r->remote_addr 鈥 屑械褌芯写 胁芯蟹胁褉邪褖邪械褌 IP-邪写褉械褋 泻谢懈械薪褌邪.
  • $r->rflush 鈥 屑械褌芯写 薪械屑械写谢械薪薪芯 锌械褉械写邪褢褌 写邪薪薪褘械 泻谢懈械薪褌褍.
  • $r->sendfile(懈屑褟 [, 褋屑械褖械薪懈械 [, 写谢懈薪邪 ) 鈥 屑械褌芯写 锌械褉械写邪褢褌 泻谢懈械薪褌褍 褋芯写械褉卸懈屑芯械 褍泻邪蟹邪薪薪芯谐芯 褎邪泄谢邪. 袧械芯斜褟蟹邪褌械谢褜薪褘械 锌邪褉邪屑械褌褉褘 褍泻邪蟹褘胁邪褞褌 薪邪褔邪谢褜薪芯械 褋屑械褖械薪懈械 懈 写谢懈薪褍 锌械褉械写邪胁邪械屑褘褏 写邪薪薪褘褏. 小芯斜褋褌胁械薪薪芯 锌械褉械写邪褔邪 写邪薪薪褘褏 锌褉芯懈褋褏芯写懈褌 褍卸械 锌芯褋谢械 蟹邪胁械褉褕械薪懈褟 锌械褉谢芯胁芯谐芯 芯斜褉邪斜芯褔褌懈泻邪.

]* $r->send_http_header(褌懈锌) 鈥 屑械褌芯写 锌械褉械写邪褢褌 泻谢懈械薪褌褍 蟹邪谐芯谢芯胁芯泻 芯褌胁械褌邪. 袧械芯斜褟蟹邪褌械谢褜薪褘泄 锌邪褉邪屑械褌褉 "褌懈锌" 褍褋褌邪薪邪胁谢懈胁邪械褌 蟹薪邪褔械薪懈械 褋褌褉芯泻懈 "Content-Type" 胁 蟹邪谐芯谢芯胁泻械 芯褌胁械褌邪.

  • $r->unescape(褌械泻褋褌) 鈥 屑械褌芯写 写械泻芯写懈褉褍械褌 褌械泻褋褌, 蟹邪写邪薪薪褘泄 胁 胁懈写械 %XX.
  • $r->uri 鈥 屑械褌芯写 胁芯蟹胁褉邪褖邪械褌 URI 蟹邪锌褉芯褋邪.