多个域的 Mod_Perl 配置

多个域的 Mod_Perl 配置

阅读 Mod_Perl 模块文档,我们可以根据每个域对其进行配置吗,我的意思是我们可以将其配置为在每个域或仅在特定域上运行吗?

我在文档中看到的内容是:

注册表脚本

要启用注册表脚本,请添加到 httpd.conf:

Alias /perl/ /home/httpd/2.0/perl/
<Location /perl/>
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
PerlOptions +ParseHeaders
Options +ExecCGI
</Location>

现在假设我们有以下脚本:

#!/usr/bin/perl
print "Content-type: text/plain\n\n";
print "mod_perl 2.0 rocks!\n";

保存在 /home/httpd/httpd-2.0/perl/rock.pl。使脚本可执行且可供所有人读取:

% chmod a+rx /home/httpd/httpd-2.0/perl/rock.pl

当然,脚本的路径也应该可以被服务器读取。在现实世界中,你可能希望有更严格的权限,但为了测试一切正常,这样做就没问题了。

根据我上面的理解,我们只能从将指令放在上面的特定文件夹运行 Perl 脚本。那么问题又来了,我们可以针对所有域或特定数量的域制定此指令吗?

答案1

您引用的文档只是一个例子。您可以启用 mod_perl Registry 以使用<Location>或甚至<LocationMatch>指令在任何您想要的地方运行 Perl 脚本。如果您只希望它们在某些域上运行,请将它们放在<VirtualHost>指令中,而不是放在 VirtualHost 之外。

答案2

经过搜索和挖掘,这里是每个域 mod_perl 安装和配置的简短而清晰的步骤。

从你的 shell 中使用 cpan 安装 mod_perl:

%cpan
cpan> install mod_perl
cpan>exit

登录你的 WHM,然后:

*)- WHM: Main >> Service Configuration >> Apache Configuration >> Include Editor
        under Pre Main Include:
        LoadModule perl_module modules/mod_perl.so
        then click "Update"
*) -    Login as root from telnet.
*) -    % mkdir - p /usr/local/apache/conf/userdata/std/2/username/domain.com
*)- cd /usr/local/apache/conf/userdata/std/2/username/domain.com
*)- % pico custom.conf
*)- put this code in the file custom.conf:

  Alias /apps/ /home/username/public_html/apps/
  <Location /apps/>
      SetHandler perl-script
      PerlResponseHandler ModPerl::Registry
      PerlOptions +ParseHeaders
      Options +ExecCGI
      Order allow,deny
      Allow from all
  </Location>


*)- % /scripts/ensure_vhost_includes --all-users

*)- create the folder mkdir -p /home/username/public_html/apps/
*)- put a test script in the /home/username/public_html/apps/ folder
*)- call the test script: http://domain.com/apps/test.cgi
*)- the output should be:
    mod_perl 2.0 rocks!
    MOD_PERL: mod_perl/2.0.7
*)- replace username by the domain username, domain.com with the actual domain name. Also rename the apps folder to anything you want to run mod_perl scripts direct.

测试脚本test.cgi代码为:

#!/usr/bin/perl
print "Content-type: text/plain\n\n";
print "mod_perl 2.0 rocks!\n";
#my $q = $ENV{MOD_PERL} ? CGI->new(shift @_) : CGI->new();
print "MOD_PERL: " . $ENV{MOD_PERL},"\n";

httpd.conf 中的 cpanel 显示:

# To customize this VirtualHost use an include file at the following location
# Include "/usr/local/apache/conf/userdata/std/2/gamept/domain.com/*.conf"

谢谢大家

相关内容