openSUSE Leap 16

Apache httpd : mod_perl の設定2025/11/13

 

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

[1] [mod_perl] をインストールします。
www:~ #
zypper -n install apache2-mod_perl
[2] httpd の設定です。
www:~ #
vi /etc/apache2/conf.d/mod_perl.conf
# 最終行に追記 (ステータスページの設定)

<Location /perl-status>
    SetHandler perl-script
    PerlResponseHandler Apache2::Status
    # アクセス許可の設定
    Require ip 127.0.0.1 10.0.0.0/24 
</Location>

www:~ #
a2enmod perl

www:~ #
a2enmod status

www:~ #
systemctl restart apache2
[3] テストスクリプトを作成して [/cgi-perl] ロケーション配下で動作する [PerlRun] モードを動作確認します。
以下のような結果が表示されれば OK です。
www:~ #
vi /srv/www/cgi-bin/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";
}

www:~ #
chmod 705 /srv/www/cgi-bin/test-mod_perl.cgi

www:~ #
curl https://www.srv.world/cgi-perl/test-mod_perl.cgi

number $a = 1
[4] 実行コードをメモリ上にキャッシュする [Registry] モードの確認です。
[/perl] ロケーション配下で動作します。
[3] で作成したテストスクリプトにアクセスすると、変数の値がメモリ上にキャッシュされているため、以下のようにアクセスする度に値が増加します。
これが意図しない動作であれば、テストスクリプトの例の場合、[Registry] モードでは以下のようにコードを修正する必要があります。
[Registry] モードではこのように変数の扱い方等、注意が必要です。
www:~ #
curl https://www.srv.world/perl/test-mod_perl.cgi

number $a = 1
www:~ #
curl https://www.srv.world/perl/test-mod_perl.cgi

number $a = 2
www:~ #
curl https://www.srv.world/perl/test-mod_perl.cgi

number $a = 3
www:~ #
vi /var/www/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";
}

www:~ #
curl https://www.srv.world/perl/test-mod_perl.cgi

number $a = 1
www:~ #
curl https://www.srv.world/perl/test-mod_perl.cgi

number $a = 1
www:~ #
curl https://www.srv.world/perl/test-mod_perl.cgi

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