使用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链接
- SpeedyCGI: http : //daemoninc.com/SpeedyCGI
- Debian: http : //www.debian.org