加速Perl脚本与SpeedyCGI / PersistentPerl在Debian蚀刻

使用SpeedyCGI / PersistentPerl在Debian Etch上加速Perl脚本

版本1.0
作者:Falko Timme

本教程将介绍如何在Debian Etch系统上安装和使用SpeedyCGI (也称为PersistentPerl)。 SpeedyCGI是一种持续运行Perl脚本的方法,可以使它们运行得更快。 它保持Perl解释器运行,并且在后续运行期间,此解释器用于处理新的执行,而不是每次启动一个新的Perl解释器。

本文档不附带任何形式的保证! 我不会保证这将为您工作!

1初步说明

我已经在Debian Etch系统(安装了Apache2)上测试了一个虚拟主机www.example.com (文档根目录: / var / www / web1 / web ),它被配置为在/ var / www / web1 / cgi-bin目录。 这里使用的路径可能与您的设置不同,因此在适当的情况下进行调整。

在下面的内容中,我将向您展示在您的Perl脚本中使用SpeedyCGI的三种不同方法。

2安装SpeedyCGI

要将SpeedyCGI与SpeedyCGI Apache2模块一起安装,我们只需运行:

apt-get install libapache2-mod-speedycgi speedy-cgi-perl

然后重新启动Apache:

/etc/init.d/apache2 force-reload

3使用SpeedyCGI

首先我们创建一个正常的“Hello World!” Perl脚本来看Perl是否正常工作。 在脚本结尾,我们使用一些特殊代码,只有在使用SpeedyCGI时才执行该代码。 这有助于我们确定何时处于“SpeedyCGI模式”以及正常的“Perl模式”中 。 我在我的cgi-bin目录, / var / www / web1 / cgi-bin中创建脚本:

vi /var/www/web1/cgi-bin/speedy-test.cgi
#!/usr/bin/perl

### Your Script Here.  For example:
print "Content-type: text/html\n\n<h1>Hello World!</h1>\n";

##
## Optionally, use the CGI::SpeedyCGI module for various things
##

# See if we are running under SpeedyCGI or not.
if (eval {require CGI::SpeedyCGI} && CGI::SpeedyCGI->i_am_speedy) {
  print "<br>Running under speedy=", CGI::SpeedyCGI->i_am_speedy ? 'yes' : 'no', "\n";
}

我们必须使脚本可执行:

chmod 755 /var/www/web1/cgi-bin/speedy-test.cgi

(如果您使用的是suExec,您还必须更改脚本的所有者和组,以匹配该suhost用户和该vhost的组。)

现在我们可以在浏览器中调用该脚本( http://www.example.com/cgi-bin/speedy-test.cgi )。 你应该看到Hello World! , 没有其他的:

所以Perl脚本正在运行,但SpeedyCGI尚未被使用。

现在我们来看看使用SpeedyCGI的三种方法。

3.1告诉Apache通过SpeedyCGI执行所有Perl脚本

第一种方法是告诉Apache,如果Perl脚本在某个位置,它应该通过SpeedyCGI执行所有Perl脚本。 我们将创建一个别名/速度/指向我们的cgi-bin目录,当我们在浏览器中使用/ speedy / address时,Perl脚本由SpeedyCGI执行,而当我们使用/ cgi-bin /时,脚本没有SpeedyCGI运行。

打开www.example.com的Apache vhost位置所在的文件,并添加以下行(如果使用ISPConfig ,则可以将以下行简单地粘贴到相应vhost的Apache指令字段中):

Alias /speedy/ /var/www/web1/cgi-bin/
<Location /speedy>
  SetHandler speedycgi-script
  Options ExecCGI
  allow from all
</Location>

稍后重新启动Apache(如果您使用ISPConfig,则不需要这样做):

/etc/init.d/apache2 restart

现在打开http://www.example.com/cgi-bin/speedy-test.cgi - 你应该看到Hello World! 只有这样才能使SpeedyCGI不被使用:

然后转到http://www.example.com/speedy/speedy-test.cgi ,您应该看到脚本正在通过SpeedyCGI执行:

3.2更改Perl脚本的Shebang行

使用SpeedyCGI的第二种方法是将Perl脚本中的shebang行从#!/ usr / bin / perl更改为#!/ usr / bin / speedy 。 这样,您不必重新配置Apache:

vi /var/www/web1/cgi-bin/speedy-test.cgi
#!/usr/bin/speedy

### Your Script Here.  For example:
print "Content-type: text/html\n\n<h1>Hello World!</h1>\n";

##
## Optionally, use the CGI::SpeedyCGI module for various things
##

# See if we are running under SpeedyCGI or not.
if (eval {require CGI::SpeedyCGI} && CGI::SpeedyCGI->i_am_speedy) {
  print "<br>Running under speedy=", CGI::SpeedyCGI->i_am_speedy ? 'yes' : 'no', "\n";
}

在浏览器中打开http://www.example.com/cgi-bin/speedy-test.cgi ,您应该会看到正在使用SpeedyCGI:

3.3更改文件扩展名

第三种方法是将Perl脚本的文件扩展名从.cgi更改为.speedy类,并告诉Apache通过SpeedyCGI运行所有.speedy文件。

所以让我们创建脚本/var/www/web1/cgi-bin/speedy-test.speedy (精确拷贝/var/www/web1/cgi-bin/speedy-test.cgi ):

vi /var/www/web1/cgi-bin/speedy-test.speedy
#!/usr/bin/perl

### Your Script Here.  For example:
print "Content-type: text/html\n\n<h1>Hello World!</h1>\n";

##
## Optionally, use the CGI::SpeedyCGI module for various things
##

# See if we are running under SpeedyCGI or not.
if (eval {require CGI::SpeedyCGI} && CGI::SpeedyCGI->i_am_speedy) {
  print "<br>Running under speedy=", CGI::SpeedyCGI->i_am_speedy ? 'yes' : 'no', "\n";
}

我们必须使脚本可执行:

chmod 755 /var/www/web1/cgi-bin/speedy-test.speedy

(如果您使用的是suExec,您还必须更改脚本的所有者和组,以匹配该suhost用户和该vhost的组。)

打开www.example.com的Apache vhost位置所在的文件,并添加以下行(如果使用ISPConfig ,则可以将以下行简单地粘贴到相应vhost的Apache指令字段中):

AddHandler speedycgi-script .speedy
<Location />
  Options ExecCGI
</Location>

稍后重新启动Apache(如果您使用ISPConfig,则不需要这样做):

/etc/init.d/apache2 restart

在浏览器中打开http://www.example.com/cgi-bin/speedy-test.speedy ,您应该会看到正在使用SpeedyCGI:

4链接

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏