FreeBSD 14
Sponsored Link

Apache httpd : mod_perl の設定2024/02/01

 

[mod_perl] をインストールして、Perl スクリプトの実行を高速化します。

[1] [mod_perl] をインストールします。
root@www:~ #
pkg install -y ap24-mod_perl2
[2] Perl インタープリタをメモリに常駐させるのみの [PerlRun] モードの設定です。
root@www:~ #
vi /usr/local/etc/apache24/modules.d/260_mod_perl.conf
# コメント解除

LoadModule perl_module libexec/apache24/mod_perl.so
root@www:~ #
vi /usr/local/etc/apache24/Includes/mod_perl.conf
# 新規作成
# 例として [/usr/local/www/apache24/perl] 配下を対象として設定

PerlSwitches -w
PerlSwitches -T

Alias /perl /usr/local/www/apache24/perl
<Directory /usr/local/www/apache24/perl>
    AddHandler perl-script .cgi .pl
    PerlResponseHandler ModPerl::PerlRun
    PerlOptions +ParseHeaders
    Options FollowSymLinks ExecCGI
    AllowOverride All
    Require all granted
</Directory>

<Location /perl-status>
    SetHandler perl-script
    PerlResponseHandler Apache2::Status
    Require ip 127.0.0.1 10.0.0.0/24
</Location>

root@www:~ #
service apache24 reload
[3] テストスクリプトを作成して動作を確認します。以下のような結果が表示されれば OK です。
root@www:~ #
mkdir /usr/local/www/apache24/perl

root@www:~ #
vi /usr/local/www/apache24/perl/test-mod_perl.cgi
#!/usr/bin/perl

use strict;
use warnings;

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

my $a = 0;
&number();

sub number {
    $a++;
    print "number \$a = $a \n";
}

root@www:~ #
chmod 705 /usr/local/www/apache24/perl/test-mod_perl.cgi

root@www:~ #
curl localhost/perl/test-mod_perl.cgi

number $a = 1
[4] 実行コードをメモリ上にキャッシュする [Registry] モードの設定です。
root@www:~ #
vi /usr/local/etc/apache24/Includes/mod_perl.conf
Alias /perl /usr/local/www/apache24/perl
<Directory /usr/local/www/apache24/perl>
    AddHandler perl-script .cgi .pl
    # コメントにしてその下に追記
    #PerlResponseHandler ModPerl::PerlRun
    PerlResponseHandler ModPerl::Registry
    PerlOptions +ParseHeaders
    Options FollowSymLinks ExecCGI
    AllowOverride All
    Require all granted
</Directory>

root@www:~ #
service apache24 reload
[5] [3] で作成したテストスクリプトにアクセスすると、変数の値がメモリ上にキャッシュされているため、以下のようにアクセスする度に値が増加します。 これが意図しない動作であれば、テストスクリプトの例の場合、[Registry] モードでは以下のようにコードを修正する必要があります。 [Registry] モードではこのように変数の扱い方等、注意が必要です。
root@www:~ #
curl localhost/perl/test-mod_perl.cgi

number $a = 1
root@www:~ #
curl localhost/perl/test-mod_perl.cgi

number $a = 2
root@www:~ #
curl localhost/perl/test-mod_perl.cgi

number $a = 3
root@www:~ #
vi /usr/local/www/apache24/perl/test-mod_perl.cgi
#!/usr/bin/perl

use strict;
use warnings;

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

my $a = 0;
&number($a);

sub number {
    my($a) = @_;
    $a++;
    print "number \$a = $a \n";
}

root@www:~ #
curl localhost/perl/test-mod_perl.cgi

number $a = 1
root@www:~ #
curl localhost/perl/test-mod_perl.cgi

number $a = 1
root@www:~ #
curl localhost/perl/test-mod_perl.cgi

number $a = 1
[6] なお、[(サーバーのホスト名 または IP アドレス)/perl-status/] にアクセスすると [mod_perl] のステータスが確認可能です。
関連コンテンツ