Chinaunix首页 | 论坛 | 博客
  • 博客访问: 203250
  • 博文数量: 39
  • 博客积分: 1057
  • 博客等级: 准尉
  • 技术积分: 926
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-27 20:13
文章分类

全部博文(39)

文章存档

2012年(24)

2011年(15)

分类: Python/Ruby

2012-03-22 18:34:57


点击(此处)折叠或打开

  1. # apache2 配置文件
  2. # 我这里有额外的ssl的配置信息,不是必须
  3. # 来源: Lover的工具小屋
  4. # author: Lover
  5. NameVirtualHost *:443

  6. <VirtualHost *:443>
  7. #============================== enable ssl ==================================
  8.         SSLEngine on
  9.         SSLCertificateFile /etc/pki/tls/certs/ca.crt
  10.         SSLCertificateKeyFile /etc/pki/tls/private/ca.key
  11.         SSLCACertificateFile "/etc/pki/tls/certs/ca.crt"
  12.         SSLVerifyClient require
  13.         SSLVerifyDepth 1

  14.         ServerAdmin bloodiron888@gmail.com
  15.         DocumentRoot "/data/cc"
  16.         ServerName ygfscc
  17.         ErrorLog "logs/cc-error_log"
  18.         CustomLog "logs/cc-access_log" common
  19.         <Directory "/data/cc">
  20.                 Order Deny,Allow
  21.                 Allow from all
  22.         </Directory>
  23. #=========================== 不缓存任何东西==========================================
  24.         <FilesMatch "\.(pl|py|php||html)$">
  25.               Header set Cache-Control "no-cache, no-store"
  26.               Header set Pragma "no-cache"
  27.               Header set Expires "-1"
  28.         </FilesMatch>

  29. #====================这里开启cgi支持并且激活mason===================================
  30.         AddHandler cgi-script .pl .cgi .py
  31.         PerlModule HTML::Mason::ApacheHandler
  32.         <Directory "/data/cc">
  33.                 Options +ExecCGI
  34.         </Directory>
  35.         <LocationMatch "\.(mhtml|html|txt)$">
  36.                 SetHandler perl-script
  37.                 PerlHandler HTML::Mason::ApacheHandler
  38.         </LocationMatch>

  39. #=====这里通过ModPerl::Registry将以前的CGI程序以mod_perl的模式运行,下面是范例====
  40.         # 将已有的perl写的cgi程序使用mod_perl的模式来运行
  41.         # 下面的配置很ok,如果cgi文件有改动会重新编译一次
  42.         # 当然还需要改变一些现有cgi程序的写法,不然会报错或者不是想要的结果
  43.         # 因为默认的stdio/stdout/stderr不一样了
  44.         #<Location /cgi/>
  45.         # SetHandler perl-script
  46.         # PerlResponseHandler ModPerl::Registry
  47.         # PerlOptions +ParseHeaders
  48.         # Options +ExecCGI
  49.         #</Location>

  50.         <Location /cgi/modperl_registry/>
  51.                 SetHandler perl-script
  52.                 PerlResponseHandler ModPerl::Registry
  53.                 PerlOptions +ParseHeaders
  54.                 Options +ExecCGI
  55.         </Location>

  56. #======这里是mod_perl的配置和设定===============
  57.         # mod_perl 配置和使用
  58.         # 由于处于自己的开发的模块几乎都在更新和变动,所以mod_perl机制就不方便在开发阶段将新的模块调用起来,这里使用PerlInitHandler Apache2::Reload,
  59.         # 会按照我们的要求对某些模块实现调用时检测模块是否更新过,这样就不用每次都要重启httpd了,里只是检查MyApache2这个模块组的模块的变动情况
  60.         # 这个功能正式上线的时候就可以关闭了,以提高运行速度

  61.         PerlModule Apache2::Reload
  62.         PerlInitHandler Apache2::Reload
  63.         PerlSetVar ReloadModules "MyApache2::*" 

  64.         # PerlSwitches 是命令行开关 ,作用和use lib 一样,将一个目录加入到@INC
  65.         # PerlSwitches -Mlib=/data/cc/cgi/mod_perl ,这里俺老是没生效
  66.         #这里没有使用 PerlSwitches 和 PerlSetEnv 的方法来修改@INC,而是通过在 setenv.pl 中写入 use lib qw(/data/cc/cgi/mod_perl) 来设定@INC

  67.         PerlRequire /data/cc/cgi/mod_perl/setenv.pl
  68.         PerlModule MyApache2::PrintEnv
  69.         <Location /print_env>
  70.                 SetHandler modperl
  71.                 PerlResponseHandler MyApache2::PrintEnv
  72.         </Location>
  73.         <LocationMatch "(env|printenv|print_env)\.html$|(env|printenv|print_env)">
  74.                 SetHandler modperl
  75.                 PerlResponseHandler MyApache2::PrintEnv
  76.         </LocationMatch>

  77. </VirtualHost>

下面是setenv.pl和PrintEnv.pm的内容

点击(此处)折叠或打开

  1. # filename:setenv.pl
  2. use strict;
  3. use warnings;
  4. use lib qw(/data/cc/cgi/mod_perl);
  5. 1;

点击(此处)折叠或打开

  1. # filename:PrintEnv.pm
  2. package MyApache2::PrintEnv;
  3. use strict;
  4. use warnings;
  5. use Apache2::RequestRec (); # 为了使用 $r->content_type
  6. use Apache2::RequestIO (); # 为了使用 $r->print
  7. use Apache2::Const -compile => ':common';

  8. sub handler{
  9.         my $r = shift;
  10.         $r->content_type('text/html;charset:utf-8');
  11.         $r->subprocess_env;
  12.         for (sort keys %ENV){
  13.                 注意modperl模式下,要使用 $r->print()来实现平时的print()函数的功能
  14.                 $r->print("$_ => $ENV{$_}
    "
    );
  15.         }
  16.         # 这里是测试代码,方便测试是否modperl对改动的模块的重新载入
  17.         $r->print("

    Mod Perl Is Powerfull and Crazy!lover lover

    "
    );
  18.         return Apache2::Const::OK;
  19. }

  20. 1;




阅读(2197) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~