#author("2018-09-04T09:44:10+09:00","","") #author("2018-09-04T09:44:29+09:00","","") [[CentOS7]] *Apache httpd : Perl + mod_perl [#r277d9b7] mod_perl をインストールして、Perl スクリプトの実行を高速化します。 *mod_perl をインストールします。 [#x98afd74] |BGCOLOR(black):COLOR(white):|c |&color(lightpink){# EPEL からインストール};| |[root@localhost ~]# yum --enablerepo=epel -y install mod_perl| *Perl インタープリタをメモリに常駐させるのみの PerlRun モードの設定です。 [#ne128871] |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# vi /etc/httpd/conf.d/perl.conf| |&color(lightpink){# 15行目:コメント解除 ( コードチェックしログに警告を表示 )}; &br; PerlSwitches -w &br; &br; &color(lightpink){# 24行目:コメント解除 ( 汚染検出モード有効 )}; &br; PerlSwitches -T &br; &br; &color(lightpink){# 30-36行目:以下のようにコメント解除}; &br; &br; Alias /perl /var/www/perl &br; <Directory /var/www/perl> &color(lightpink){# mod_perl 環境下にするディレクトリ}; &br; &br; SetHandler perl-script &color(lightpink){# ディレクトリ配下は全て perl-script 扱いになる}; &br; &br; &color(lime){# AddHandler perl-script .cgi}; &color(lightpink){# 指定拡張子のみ perl-script 扱いにするなら上行を無効にして当行を有効化}; &br; &br; # PerlResponseHandler ModPerl::Registry &br; &color(lime){PerlResponseHandler ModPerl::PerlRun}; &color(lightpink){# PerlRunモード指定}; &br; &br; PerlOptions +ParseHeaders &br; Options +ExecCGI &br; </Directory> &br; &br; &color(lightpink){# 43-49行目:以下のようにコメント解除 & 追記}; &br; <Location /perl-status> &br; SetHandler perl-script &br; PerlResponseHandler Apache2::Status &br; &color(lime){Require ip 127.0.0.1 10.0.0.0/24}; &color(lightpink){# アクセス許可範囲設定}; &br; &br; # Order deny,allow &br; # Deny from all &br; # Allow from .example.com &br; </Location> &br; | |[root@localhost ~]# systemctl restart httpd| *テストスクリプトを作成して動作を確認します。以下のような結果が表示されれば OK です。 [#x3c6124b] |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# mkdir /var/www/perl| |[root@localhost ~]# vi /var/www/perl/test-mod_perl.cgi| | &br; #!/usr/bin/perl &br; &br; use strict; &br; use warnings; &br; &br; print "Content-type: text/html\n\n"; &br; print "<html>\n<body>\n"; &br; print "<div style=\"width:100%; font-size:40px; font-weight:bold; text-align:center;\">"; &br; &br; my $a = 0; &br; &number(); &br; &br; print "</div>\n</body>\n</html>"; &br; &br; sub number { &br; $a++; &br; print "number \$a = $a"; &br; } &br; | |[root@localhost ~]# chmod 705 /var/www/perl/test-mod_perl.cgi| &ref(01.png); *実行コードをメモリ上にキャッシュする Registry モードの設定です。 [#wecb22b2] |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# vi /etc/httpd/conf.d/perl.conf| |Alias /perl /var/www/perl &br; <Directory /var/www/perl> &br; SetHandler perl-script &br; PerlResponseHandler ModPerl::Registry &color(lightpink){# コメント解除}; &br; &br; &color(lime){#}; PerlResponseHandler ModPerl::PerlRun &color(lightpink){# コメントにする}; &br; &br; PerlOptions +ParseHeaders &br; Options +ExecCGI &br; </Directory> &br; | |[root@localhost ~]# systemctl restart httpd| 作成したテストスクリプトにアクセスすると、変数の値がメモリ上にキャッシュされているため、以下のようにアクセスする度に値が増加します。 これが意図しない動作であれば、テストスクリプトの例の場合、Registry モードでは以下のようにコードを修正する必要があります。 Registry モードではこのように変数の扱い方等、注意が必要です。 [#k33e9698] 作成したテストスクリプトにアクセスすると、変数の値がメモリ上にキャッシュされているため、以下のようにアクセスする度に値が増加します。 これが意図しない動作であれば、テストスクリプトの例の場合、Registry モードでは以下のようにコードを修正する必要があります。 Registry モードではこのように変数の扱い方等、注意が必要です。 &ref(02.png); |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# vi /var/www/perl/test-mod_perl.cgi| |#!/usr/bin/perl &br; &br; use strict; &br; use warnings; &br; &br; print "Content-type: text/html\n\n"; &br; print "<html>\n<body>\n"; &br; print "<div style=\"width:100%; font-size:40px; font-weight:bold; text-align:center;\">"; &br; &br; my $a = 0; &br; &br; &number($a &br; ); &br; &br; print "</div>\n</body>\n</html>"; &br; &br; sub number { &br; &br; my($a) = @_; &br; &br; $a++; &br; print "number \$a = $a"; &br; } &br; | なお、「http://(サーバーのホスト名またはIPアドレス)/perl-status/」にアクセスすると、mod_perl のステータスが確認可能です。 &ref(03.png); &ref(04.png);