在Apache2.4和Amazon EC2上进行Apache模块开发

我在 Apache 2.2 盛行的时代开发过 Apache 模块,但自从升级到 2.4 版本以后就没碰过了。所以为了赶上最新进展,我决定从环境的设置开始学起。

Apache模块是用C语言编写的,它利用Apache提供的APR函数集来构建,并可以访问Web服务器的所有功能。(Apache本身就是Apache模块的集合体。)

当然,它不具备脚本语言的轻便性,而需要编译和构建(因此速度较快)。因此,它适用于编写类似于中间件的常见处理,而不是用作Web内容生成的工具。

例如,我曾听说过很久以前 DeNA 公司使用 Apache 模块实现了基于功能机的表情符号转换。另外,我所在的公司也曾经发布了一个名为 mod_ktai 的模块。

这次,我们希望在最终运行时使用AWS,所以我们将在Amazon EC2上建立环境,并尝试运行生成的模板。

假设或者概念的基础

スクリーンショット 2014-10-14 17.05.53.png

安装Apache 2.4

由于目前无法在yum上安装,因此需要使用wget获取软件源码并进行编译。

参考:源代码下载页面 ⇒ http://httpd.apache.org/download.cgi#apache24

提前安装编译所需要的东西。

$ sudo yum install -y gcc pcre-devel apr-util-devel

② 下载和安装 Apache 2.4

$ wget http://ftp.jaist.ac.jp/pub/apache//httpd/httpd-2.4.10.tar.gz
$ gunzip -c httpd-2.4.10.tar.gz | tar xvf -
$ cd httpd-2.4.10
$ ./configure
$ make
$ sudo make install

确认动作

screen.png

创建 Apache 模块

这次我们将同时进行操作确认,将原型直接运行一下。

请参考:http://httpd.apache.org/docs/2.4/programs/apxs.html

创建原型

$ /usr/local/apache2/bin/apxs -g -n hoge

-g:这是生成的雏形。
-n:这是模块的名称。

然后文件将被展开如下。

screen1.png

顺便提一下,这个模板与内容处理程序关联,也就是像 PHP 等脚本一样,挂接到 Apache 的生成内容并返回给客户端的阶段上。

#include "httpd.h"
#include "http_config.h"
#include "http_protocol.h"
#include "ap_config.h"


/* The sample content handler */
static int hoge_handler(request_rec *r)
{
    if (strcmp(r->handler, "hoge")) {
        return DECLINED;
    }
    r->content_type = "text/html";      

    if (!r->header_only)
        ap_rputs("The sample page from mod_hoge.c\n", r);
    return OK;
}

static void hoge_register_hooks(apr_pool_t *p)
{
    ap_hook_handler(hoge_handler, NULL, NULL, APR_HOOK_MIDDLE);
}

/* Dispatch list for API hooks */
module AP_MODULE_DECLARE_DATA hoge_module = {
    STANDARD20_MODULE_STUFF, 
    NULL,                  /* create per-dir    config structures */
    NULL,                  /* merge  per-dir    config structures */
    NULL,                  /* create per-server config structures */
    NULL,                  /* merge  per-server config structures */
    NULL,                  /* table of config file commands       */
    hoge_register_hooks  /* register hooks                      */
};

进行编译和安装

screen2.png

确认动作

这个模板是一个内容处理器,所以当访问 http://<域名>/hoge 时会启动处理器。

54_68_221_199_hoge.png

最后

这次,我给出了一个简单的处理器的例子来解释。个人来说,我觉得在目前的”智能手机时代”里,下面的例子可能是一个很好的选择。

    • フィルター機能を使ってコンテンツ変換

例えば PHP や Rails等 での レスポンスbody を変換する
用途は 多デバイスへの対応

APIサーバ としての共通処理

認証やキャッシュ
フォーマット変換

他にも 高速化 が求められる処理

最近,使用 mod_mruby 可以在 Ruby 中编写 Apache 模块,所以我也考虑尝试一下这个功能。虽然我使用的是 Apache 2.2,但我之前已经写过如何在 Amazon EC2 上安装 mod_mruby 的步骤。

广告
将在 10 秒后关闭
bannerAds