将想要的状态,
以“彩色”在大脑中呈现!

ngx_http_perl_module

ngx_http_perl_module

ngx_http_perl_module 模块用于在 Perl 中实现 location 和变量处理器,并将 Perl 调用插入到 SSI中。

此模块不是默认构建,可以在构建时使用 --with-http_perl_module 配置参数启用。

该模块需要 Perl 5.6.1 或更高版本。C 编译器应该与用于构建Perl 的编译器兼容。

已知的问题

该模块还处于实验阶段,以下是一些注意事项。

为了让 Perl 能在重新配置过程中重新编译已修改的模块,应使用 -Dusemultiplicity=yes-Dusethreads=yes 参数来构建它。另外,为了让 Perl 在运行时泄漏更少的内存,应使用 -Dusemymalloc=no 参数来构建它。要检查已构建的 Perl 中这些参数值(在示例中已指定首选值),请运行:

$ perl -V:usemultiplicity -V:usemymalloc
usemultiplicity='define';
usemymalloc='n';

请注意,在使用新的 -Dusemultiplicity=yes-Dusethreads=yes 参数重新构建 Perl 之后,所有二进制 Perl 模块也必须重新构建 — 否则它们将停止使用新的 Perl。

在每次重新配置后,master 进程和 worker 进程都有可能增加。如果 master 进程增加到不可接受的大小,则可以使用实时升级流程而无需更改可执行文件。

当 Perl 模块执行长时间运行的操作时,例如解析域名、连接到另一台服务器或查询数据库时,将不会处理分配给当前 worker 进程的其他请求。因此,建议仅执行可预测且执行时间短的操作,例如访问本地文件系统。

示例配置

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;
        }
    }

The perl/lib/hello.pm module:

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/>");

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

    return OK;
}

1;
__END__

指令

perl

- 说明
语法 perl module::function|'sub { ... }';
默认 ——
上下文 location、limit_except

给指定的 location 设置一个 Perl 处理程序。

perl_modules

- 说明
语法 perl_modules path;
默认 ——
上下文 http

为 Perl 模块设置额外的路径。

perl_require

- 说明
语法 perl_require module;
默认 ——
上下文 http

定义每次重新配置期间将要加载的模块的名称。可存在多个 perl_require 指令。

perl_set

- 说明
语法 perl_set $variable module::function|'sub { ... }';
默认 ——
上下文 http

为指定的变量安装一个 Perl 处理程序。

从 SSI 调用 Perl

使用 SSI 命令调用 Perl 的格式如下:

<!--# perl sub="module::function" arg="parameter1" arg="parameter2" ...
-->

$r 请求对象方法

赞(0)
未经允许不得转载:自猿其说 » ngx_http_perl_module

评论 抢沙发

评论前必须登录!

 

聚合实用在线工具

前往在线工具