CentOS7

Apache httpd : Perl + mod_perl

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

mod_perl をインストールします。

# EPEL からインストール
[root@localhost ~]# yum --enablerepo=epel -y install mod_perl

Perl インタープリタをメモリに常駐させるのみの PerlRun モードの設定です。

[root@localhost ~]# vi /etc/httpd/conf.d/perl.conf
# 15行目:コメント解除 ( コードチェックしログに警告を表示 )
PerlSwitches -w

# 24行目:コメント解除 ( 汚染検出モード有効 )
PerlSwitches -T

# 30-36行目:以下のようにコメント解除

Alias /perl /var/www/perl
<Directory /var/www/perl> # mod_perl 環境下にするディレクトリ

SetHandler perl-script # ディレクトリ配下は全て perl-script 扱いになる

# AddHandler perl-script .cgi # 指定拡張子のみ perl-script 扱いにするなら上行を無効にして当行を有効化

# PerlResponseHandler ModPerl::Registry
PerlResponseHandler ModPerl::PerlRun # PerlRunモード指定

PerlOptions +ParseHeaders
Options +ExecCGI
</Directory>

# 43-49行目:以下のようにコメント解除 & 追記
<Location /perl-status>
SetHandler perl-script
PerlResponseHandler Apache2::Status
Require ip 127.0.0.1 10.0.0.0/24 # アクセス許可範囲設定

# Order deny,allow
# Deny from all
# Allow from .example.com
</Location>
[root@localhost ~]# systemctl restart httpd

テストスクリプトを作成して動作を確認します。以下のような結果が表示されれば OK です。

[root@localhost ~]# mkdir /var/www/perl
[root@localhost ~]# vi /var/www/perl/test-mod_perl.cgi

#!/usr/bin/perl

use strict;
use warnings;

print "Content-type: text/html\n\n";
print "<html>\n<body>\n";
print "<div style=\"width:100%; font-size:40px; font-weight:bold; text-align:center;\">";

my $a = 0;
&number();

print "</div>\n</body>\n</html>";

sub number {
$a++;
print "number \$a = $a";
}
[root@localhost ~]# chmod 705 /var/www/perl/test-mod_perl.cgi

01.png

実行コードをメモリ上にキャッシュする Registry モードの設定です。

[root@localhost ~]# vi /etc/httpd/conf.d/perl.conf
Alias /perl /var/www/perl
<Directory /var/www/perl>
SetHandler perl-script
PerlResponseHandler ModPerl::Registry # コメント解除

# PerlResponseHandler ModPerl::PerlRun # コメントにする

PerlOptions +ParseHeaders
Options +ExecCGI
</Directory>
[root@localhost ~]# systemctl restart httpd

作成したテストスクリプトにアクセスすると、変数の値がメモリ上にキャッシュされているため、以下のようにアクセスする度に値が増加します。 これが意図しない動作であれば、テストスクリプトの例の場合、Registry モードでは以下のようにコードを修正する必要があります。 Registry モードではこのように変数の扱い方等、注意が必要です。

02.png

[root@localhost ~]# vi /var/www/perl/test-mod_perl.cgi
#!/usr/bin/perl

use strict;
use warnings;

print "Content-type: text/html\n\n";
print "<html>\n<body>\n";
print "<div style=\"width:100%; font-size:40px; font-weight:bold; text-align:center;\">";

my $a = 0;

&number($a &br; );

print "</div>\n</body>\n</html>";

sub number {

my($a) = @_;

$a++;
print "number \$a = $a";
}

なお、「http://(サーバーのホスト名またはIPアドレス)/perl-status/」にアクセスすると、mod_perl のステータスが確認可能です。

03.png

04.png


添付ファイル: file04.png 82件 [詳細] file03.png 70件 [詳細] file02.png 96件 [詳細] file01.png 70件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-09-04 (火) 09:46:00