在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

在未指定”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

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 的位置相同。

广告
将在 10 秒后关闭
bannerAds