Apache httpd : mod_perl の設定2022/03/16 |
|
[mod_perl] をインストールして、Perl スクリプトの実行を高速化します。
|
|
| [1] | [mod_perl] をインストールします。 |
|
# EPEL からインストール [root@www ~]# dnf --enablerepo=epel -y install mod_perl
|
| [2] | Perl インタープリタをメモリに常駐させるのみの [PerlRun] モードの設定です。 |
|
[root@www ~]#
vi /etc/httpd/conf.d/perl.conf # 15行目 : コメント解除 (コードチェックしログに警告を表示) PerlSwitches -w # 24行目 : コメント解除 (汚染検出モード有効) PerlSwitches -T # 30-37行目 : コメント解除して設定を追記
Alias /perl /var/www/perl
<Directory /var/www/perl>
# ディレクトリ配下は全て perl-script 扱いになる
SetHandler perl-script
# 指定拡張子のみ perl-script 扱いにする場合は上行を無効化して当行を追記
AddHandler perl-script .cgi
# PerlResponseHandler ModPerl::Registry
# PerlRun モード指定行を追記
PerlResponseHandler ModPerl::PerlRun
PerlOptions +ParseHeaders
Options +ExecCGI
</Directory>
# 44-48行目 : 以下のようにコメント解除して追記 (ステータス確認ページ)
<Location /perl-status>
SetHandler perl-script
PerlResponseHandler Apache2::Status
# 任意のアクセス許可範囲を設定
Require ip 127.0.0.1 10.0.0.0/24
# Require host .example.com
</Location>
[root@www ~]# systemctl restart httpd |
| [3] | テストスクリプトを作成して動作を確認します。以下のような結果が表示されれば OK です。 |
#!/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";
}
chmod 705 /var/www/perl/test-mod_perl.cgi [root@www ~]# curl https://www.srv.world/perl/test-mod_perl.cgi number $a = 1 |
| [4] | 実行コードをメモリ上にキャッシュする [Registry] モードの設定です。 |
|
[root@www ~]#
vi /etc/httpd/conf.d/perl.conf
Alias /perl /var/www/perl
<Directory /var/www/perl>
# SetHandler perl-script
AddHandler perl-script .cgi
# Registry モード指定行有効化
PerlResponseHandler ModPerl::Registry
# PerlResponseHandler ModPerl::PerlRun
PerlOptions +ParseHeaders
Options +ExecCGI
</Directory>
[root@www ~]# systemctl reload httpd |
| [5] | [3] で作成したテストスクリプトにアクセスすると、変数の値がメモリ上にキャッシュされているため、以下のようにアクセスする度に値が増加します。 これが意図しない動作であれば、テストスクリプトの例の場合、[Registry] モードでは以下のようにコードを修正する必要があります。 [Registry] モードではこのように変数の扱い方等、注意が必要です。 |
|
[root@www ~]# curl https://www.srv.world/perl/test-mod_perl.cgi number $a = 1 [root@www ~]# curl https://www.srv.world/perl/test-mod_perl.cgi number $a = 2 [root@www ~]# curl https://www.srv.world/perl/test-mod_perl.cgi number $a = 3
[root@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"; }[root@www ~]# curl https://www.srv.world/perl/test-mod_perl.cgi number $a = 1 [root@www ~]# curl https://www.srv.world/perl/test-mod_perl.cgi number $a = 1 [root@www ~]# curl https://www.srv.world/perl/test-mod_perl.cgi number $a = 1 |
| [6] | なお、[(サーバーのホスト名 または IP アドレス)/perl-status/] にアクセスすると [mod_perl] のステータスが確認可能です。 |
|
|
| Sponsored Link |
|
|