WSL で apache を動かす
動作環境
$ uname -srvmpi
Linux 4.4.0-18362-Microsoft #476-Microsoft Fri Nov 01 16:53:00 PST 2019 x86_64 x86_64 x86_64 GNU/Linux
$ apache2 -v
Server version: Apache/2.4.29 (Ubuntu)
Server built: 2019-09-16T12:58:48
$ perl --version
This is perl 5, version 26, subversion 1 (v5.26.1) built for x86_64-linux-gnu-thread-multi
...
各種コマンド
service の状態確認/停止/起動/再起動/設定再読込
service apache2 status
sudo service apache2 stop
sudo service apache2 start
sudo service apache2 restart
sudo service apache2 reload
モジュールの有効/無効
sudo a2enmod cgid
sudo a2dismod cgid
設定の有効/無効
sudo a2enconf serve-cgi-bin
sudo a2disconf serve-cgi-bin
apache2
apache2 をインストール
sudo apt install apache2
service の起動後にこの辺にアクセスできるかを確認
cgid
設定の初期値(編集前)
-
cgid
モジュールは最初から有効になっている - 設定
mime
,serve-cgi-bin
は最初から有効になっている
【設定-A1】/etc/apache2/mods-available/mime.conf
...
#
# AddHandler allows you to map certain file extensions to "handlers":
# actions unrelated to filetype. These can be either built into the server
# or added with the Action directive (see below)
#
# To use CGI scripts outside of ScriptAliased directories:
# (You will also need to add "ExecCGI" to the "Options" directive.)
#
#AddHandler cgi-script .cgi
...
【設定-B1】/etc/apache2/conf-available/serve-cgi-bin.conf
...
<IfDefine ENABLE_USR_LIB_CGI_BIN>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Require all granted
</Directory>
</IfDefine>
...
テスト用のCGIプログラムを配置
- 実行権限があること(
chmod +x /usr/lib/cgi-bin/env.cgi
)
/usr/lib/cgi-bin/env.cgi
#!/usr/bin/perl
use Cwd qw(getcwd);
print "Content-type: text/html\n\n";
print "<html><head><title>ENV</title></head><body>";
print "\n<p>Current Working Directory is ",getcwd(),"</p>\n<table border=1>";
my @keys = qw/MOD_PERL DOCUMENT_ROOT SCRIPT_NAME SCRIPT_FILENAME/;
for my $i (@keys){ print "\n<tr><td>ENV{$i}</td><td>$ENV{$i}</td></tr>"; }
print "\n</table></body></html>";
service の再起動後にアクセスできるかを確認
getcwd() | /usr/lib/cgi-bin |
ENV{MOD_PERL} | |
ENV{DOCUMENT_ROOT} | /var/www/html |
ENV{SCRIPT_NAME} | /cgi-bin/env.cgi |
ENV{SCRIPT_FILENAME} | /usr/lib/cgi-bin/env.cgi |
設定 ("ScriptAliase" が指定されていないディレクトリでCGIを有効にする)
【設定-A2】/etc/apache2/mods-available/mime.conf
...
#
# AddHandler allows you to map certain file extensions to "handlers":
# actions unrelated to filetype. These can be either built into the server
# or added with the Action directive (see below)
#
# To use CGI scripts outside of ScriptAliased directories:
# (You will also need to add "ExecCGI" to the "Options" directive.)
#
AddHandler cgi-script .cgi
...
設定 serve-mine
を追加し、有効にする
【設定-C2】/etc/apache2/conf-available/serve-mine.conf
Alias /perl /var/www/perl
<Directory "/var/www/perl">
Options +ExecCGI
</Directory>
sudo a2enconf serve-mine
テスト用のCGIプログラムを配置
- 実行権限があること(
chmod +x /var/www/perl/env.cgi
)
/var/www/perl/env.cgi
# /usr/lib/cgi-bin/env.cgi と同じ内容
service の再起動後にアクセスできるかを確認
getcwd() | /var/www/perl |
ENV{MOD_PERL} | |
ENV{DOCUMENT_ROOT} | /var/www/html |
ENV{SCRIPT_NAME} | /perl/env.cgi |
ENV{SCRIPT_FILENAME} | /var/www/perl/env.cgi |
mod-perl2
mod-perl2 をインストール
sudo apt install libapache2-mod-perl2
設定 (ModPerl::Registry を使用)
- 【設定-A1】のままで良い
【設定-C3A】/etc/apache2/conf-available/serve-mine.conf
Alias /perl /var/www/perl
<Directory "/var/www/perl">
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
# PerlResponseHandler ModPerl::RegistryPrefork
PerlOptions +ParseHeaders
Options +ExecCGI
</Directory>
モジュール
-
cgid
を無効にしないと、apache2 が起動しない -
perl
を有効にする
sudo a2dismod cgid
sudo a2enmod perl
service の再起動後にアクセスできるかを確認
getcwd() | / |
ENV{MOD_PERL} | mod_perl/2.0.10 |
ENV{DOCUMENT_ROOT} | /var/www/html |
ENV{SCRIPT_NAME} | /perl/env.cgi |
ENV{SCRIPT_FILENAME} | /var/www/perl/env.cgi |
設定 (ModPerl::RegistryPrefork を使用)
- 【設定-A1】のままで良い
【設定-C3B】/etc/apache2/conf-available/serve-mine.conf
Alias /perl /var/www/perl
<Directory "/var/www/perl">
SetHandler perl-script
# PerlResponseHandler ModPerl::Registry
PerlResponseHandler ModPerl::RegistryPrefork
PerlOptions +ParseHeaders
Options +ExecCGI
</Directory>
モジュール
-
cgid
を無効にしないと、apache2 が起動しない -
perl
を有効にする -
mpm_event
を無効にしないと、アクセス時にエラーとなる -
mpm_prefork
を有効にする
sudo a2dismod cgid
sudo a2enmod perl
sudo a2dismod mpm_event
sudo a2enmod mpm_prefork
service の再起動後にアクセスできるかを確認
getcwd() | /var/www/perl |
ENV{MOD_PERL} | mod_perl/2.0.10 |
ENV{DOCUMENT_ROOT} | /var/www/html |
ENV{SCRIPT_NAME} | /perl/env.cgi |
ENV{SCRIPT_FILENAME} | /var/www/perl/env.cgi |