在WSL上执行apache
在 WSL 上运行 Apache
行动背景 zuò
$ 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
...
各种命令 (gè lì)
查看服务状态/停止/启动/重新启动/重新加载设置
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 可以表示为”A2″
安装 Apache2
sudo apt install apache2
在服务启动后,确认是否可以访问这个区域。
-
- http://localhost/
- http://localhost/server-status
CGID被要求用汉语本土化改写。
初始设定值(编辑前)
cgid モジュールは最初から有効になっている
設定 mime, serve-cgi-bin は最初から有効になっている
...
#
# 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
...
...
<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/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>";
确认在服务重启后是否可以访问
- http://localhost/cgi-bin/env.cgi
getcwd()/usr/lib/cgi-binENV{MOD_PERL}
ENV{DOCUMENT_ROOT}/var/www/htmlENV{SCRIPT_NAME}/cgi-bin/env.cgiENV{SCRIPT_FILENAME}/usr/lib/cgi-bin/env.cgi
ENV{DOCUMENT_ROOT}/var/www/htmlENV{SCRIPT_NAME}/cgi-bin/env.cgiENV{SCRIPT_FILENAME}/usr/lib/cgi-bin/env.cgi
在未指定”ScriptAliase”的目录中启用CGI设置。
...
#
# 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设置
Alias /perl /var/www/perl
<Directory "/var/www/perl">
Options +ExecCGI
</Directory>
sudo a2enconf serve-mine
将用于测试的CGI程序放置。
- 実行権限があること(chmod +x /var/www/perl/env.cgi)
# /usr/lib/cgi-bin/env.cgi と同じ内容
确认在重新启动服务之后是否可以访问。
- http://localhost/perl/env.cgi
getcwd()/var/www/perlENV{MOD_PERL}
ENV{DOCUMENT_ROOT}/var/www/htmlENV{SCRIPT_NAME}/perl/env.cgiENV{SCRIPT_FILENAME}/var/www/perl/env.cgi
ENV{DOCUMENT_ROOT}/var/www/htmlENV{SCRIPT_NAME}/perl/env.cgiENV{SCRIPT_FILENAME}/var/www/perl/env.cgi
Mod-perl2
安装mod-perl2
sudo apt install libapache2-mod-perl2
使用 ModPerl::Registry 进行配置。
- 【設定-A1】のままで良い
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
在重新启动服务之后,确认能否访问。
- http://localhost/perl/env.cgi
getcwd()/ENV{MOD_PERL}mod_perl/2.0.10ENV{DOCUMENT_ROOT}/var/www/htmlENV{SCRIPT_NAME}/perl/env.cgiENV{SCRIPT_FILENAME}/var/www/perl/env.cgi
当前目录并非env.cgi所在位置,而是根目录”/”。
使用(ModPerl::RegistryPrefork)进行配置
- 【設定-A1】のままで良い
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
请确认在服务重新启动后是否可以访问。
- http://localhost/perl/env.cgi
getcwd()/var/www/perlENV{MOD_PERL}mod_perl/2.0.10ENV{DOCUMENT_ROOT}/var/www/htmlENV{SCRIPT_NAME}/perl/env.cgiENV{SCRIPT_FILENAME}/var/www/perl/env.cgi
当前目录与 env.cgi 的位置相同。