mod_perl をインストールして、Perl スクリプトの実行を高速化します。
# EPEL からインストール |
[root@localhost ~]# yum --enablerepo=epel -y install mod_perl |
[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 |
[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 |
[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 モードではこのように変数の扱い方等、注意が必要です。
[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 のステータスが確認可能です。