zoukankan      html  css  js  c++  java
  • 用Perl编写Apache模块

    前言

    Apache被许多大流量网站所嫌弃,但很多企业级的场景则更为适用。

    Apache httpd 从 2.0 之后,已经不仅仅局限于一个 http 的服务器,更是一个完善而强大、灵活而健壮且容易扩展的开发平台。

    开发人员通过定制 Apache 模块,可以几乎无限制的扩展 Apache httpd,使其更好的与实际应用场景匹配,而又无需考虑底层的网络传输细节。这样既可以提高开发效率,节省开发成本,又能充分利用 Apache 本身的健壮性及可靠性。

    普遍意义上的理解,Apache的模块开发,分为两种途径:C、Perl。

    Apache/Perl 集成计划, 将 Perl 程序设计语言的强大功能, 与 Apache HTTP 服务器 紧密地结合到了一起。 通过 mod_perl 模块, 可以完全使用 Perl 来撰写 Apache 模块。 此外, 服务器中嵌入的持久性解释器, 消除了由于启动外部的解释器为 Perl 脚本的启动所造成的性能损失,编码难度与普通CGI基本相同,运 行速度仅比API C略逊一些。

    MOD_PERL技术的介绍

    MOD_PERL技术将PERL解析器编译到APACHE服务器中一起等待客户端请求。


    MOD_PERL技术在APACHE中一共有三种代码运行方式:


    PerlRun模式:这个模式主要兼容旧式CGI程序,仅仅使用APACHE中的PERL解析器对代码进行解析不进行缓冲。
    Registry模式:这个模式的Perl代码在被访问过以后会被编译成为APACHE API模块并且存储在缓冲之中,为了保证运行APACHE会选择性的产生、不只一个副本在内存中。
    APACHE API模式:这个模式在APACHE启动的时候就直接将代码编译驻留在缓冲之中。

    配置完Apache和Perl模块后,可以用perlinfo函数查看系统环境相关变量。下图是在虚拟机中跑出来的效果,用的是XAMPP套件的老版本。

    看到这图,您有何感想?是不是觉得太像phpinfo了,不!是phpinfo太像他了。

    编写APACHE模块代码

    example.pm:

    package example;
    
    use strict;
    use Apache::Request;
    use Apache::Constants qw(:common);
    
    sub handler {
      my $r = shift;
      my $req = Apache::Request->new($r);
    
      $req->send_http_header('text/html');
      $req->print('Hello World!');
    
    return OK;
    } 


    在HTTPD.CONF里做以下设置:

    PerlModule example;
    <LocationMatch "(service)$">
            SetHandler perl-script
            PerlHandler example
    </LocationMatch> 


    这样当用户访问http://yourhost/service的时候会被这个APACHE模块处理。

    有什么用

    其实这个话题是接续上篇文章 svn代码版本管理工具的,利用mod_perl 可以编写apache模块来实现自定义的authn与authz模块,以实现符合实际情况的鉴权功能。

  • 相关阅读:
    所有问题都可以通过增加一层来解决
    open一个页面并关闭父页(小技巧)
    <%=字符串%>回刷技巧(小技巧)
    轮环(Ouroboros)世界观介绍,摘自Guide Book
    windows7下MSN如何最小化到任务栏
    触发器权限
    网页GZIP压缩
    iis6配置使用页面Gzip压缩提速
    唉,被删的帖
    创建型模式,结构型模式,结构型模式
  • 原文地址:https://www.cnblogs.com/x3d/p/3771704.html
Copyright © 2011-2022 走看看