点击(此处)折叠或打开
- # apache2 配置文件
- # 我这里有额外的ssl的配置信息,不是必须
- # 来源: Lover的工具小屋
- # author: Lover
- NameVirtualHost *:443
- <VirtualHost *:443>
- #============================== enable ssl ==================================
- SSLEngine on
- SSLCertificateFile /etc/pki/tls/certs/ca.crt
- SSLCertificateKeyFile /etc/pki/tls/private/ca.key
- SSLCACertificateFile "/etc/pki/tls/certs/ca.crt"
- SSLVerifyClient require
- SSLVerifyDepth 1
- ServerAdmin bloodiron888@gmail.com
- DocumentRoot "/data/cc"
- ServerName ygfscc
- ErrorLog "logs/cc-error_log"
- CustomLog "logs/cc-access_log" common
- <Directory "/data/cc">
- Order Deny,Allow
- Allow from all
- </Directory>
- #=========================== 不缓存任何东西==========================================
- <FilesMatch "\.(pl|py|php||html)$">
- Header set Cache-Control "no-cache, no-store"
- Header set Pragma "no-cache"
- Header set Expires "-1"
- </FilesMatch>
- #====================这里开启cgi支持并且激活mason===================================
- AddHandler cgi-script .pl .cgi .py
- PerlModule HTML::Mason::ApacheHandler
- <Directory "/data/cc">
- Options +ExecCGI
- </Directory>
- <LocationMatch "\.(mhtml|html|txt)$">
- SetHandler perl-script
- PerlHandler HTML::Mason::ApacheHandler
- </LocationMatch>
- #=====这里通过ModPerl::Registry将以前的CGI程序以mod_perl的模式运行,下面是范例====
- # 将已有的perl写的cgi程序使用mod_perl的模式来运行
- # 下面的配置很ok,如果cgi文件有改动会重新编译一次
- # 当然还需要改变一些现有cgi程序的写法,不然会报错或者不是想要的结果
- # 因为默认的stdio/stdout/stderr不一样了
- #<Location /cgi/>
- # SetHandler perl-script
- # PerlResponseHandler ModPerl::Registry
- # PerlOptions +ParseHeaders
- # Options +ExecCGI
- #</Location>
- <Location /cgi/modperl_registry/>
- SetHandler perl-script
- PerlResponseHandler ModPerl::Registry
- PerlOptions +ParseHeaders
- Options +ExecCGI
- </Location>
- #======这里是mod_perl的配置和设定===============
- # mod_perl 配置和使用
- # 由于处于自己的开发的模块几乎都在更新和变动,所以mod_perl机制就不方便在开发阶段将新的模块调用起来,这里使用PerlInitHandler Apache2::Reload,
- # 会按照我们的要求对某些模块实现调用时检测模块是否更新过,这样就不用每次都要重启httpd了,里只是检查MyApache2这个模块组的模块的变动情况
- # 这个功能正式上线的时候就可以关闭了,以提高运行速度
- PerlModule Apache2::Reload
- PerlInitHandler Apache2::Reload
- PerlSetVar ReloadModules "MyApache2::*"
- # PerlSwitches 是命令行开关 ,作用和use lib 一样,将一个目录加入到@INC
- # PerlSwitches -Mlib=/data/cc/cgi/mod_perl ,这里俺老是没生效
- #这里没有使用 PerlSwitches 和 PerlSetEnv 的方法来修改@INC,而是通过在 setenv.pl 中写入 use lib qw(/data/cc/cgi/mod_perl) 来设定@INC
- PerlRequire /data/cc/cgi/mod_perl/setenv.pl
- PerlModule MyApache2::PrintEnv
- <Location /print_env>
- SetHandler modperl
- PerlResponseHandler MyApache2::PrintEnv
- </Location>
- <LocationMatch "(env|printenv|print_env)\.html$|(env|printenv|print_env)">
- SetHandler modperl
- PerlResponseHandler MyApache2::PrintEnv
- </LocationMatch>
- </VirtualHost>
下面是setenv.pl和PrintEnv.pm的内容
点击(此处)折叠或打开
- # filename:setenv.pl
- use strict;
- use warnings;
- use lib qw(/data/cc/cgi/mod_perl);
- 1;
点击(此处)折叠或打开
- # filename:PrintEnv.pm
- package MyApache2::PrintEnv;
- use strict;
- use warnings;
- use Apache2::RequestRec (); # 为了使用 $r->content_type
- use Apache2::RequestIO (); # 为了使用 $r->print
- use Apache2::Const -compile => ':common';
- sub handler{
- my $r = shift;
- $r->content_type('text/html;charset:utf-8');
- $r->subprocess_env;
- for (sort keys %ENV){
- 注意modperl模式下,要使用 $r->print()来实现平时的print()函数的功能
- $r->print("$_ => $ENV{$_}
"); - }
- # 这里是测试代码,方便测试是否modperl对改动的模块的重新载入
- $r->print("
Mod Perl Is Powerfull and Crazy!lover lover
"); - return Apache2::Const::OK;
- }
- 1;