• C语言-apache mod(模块开发)-采用apxs开发实战(centos7.2 linux篇)


    C语言-apache mod(模块开发)-采用apxs开发实战(centos7.2 linux篇)


    名词解释:apxs

    apxs is a tool for building and installing extension modules for the Apache HyperText Transfer Protocol (HTTP) server. 
    apxs是用来编译和安装 apache 服务器的扩展模块(mod)、也能生成项目模版(下面有具体使用说明)
    名词解释:MinGW
    MinGW,是Minimalist GNUfor Windows的缩写。它是一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,
    允许你在GNU/Linux和Windows平台生成本地的Windows程序而不需要第三方C运行时(C Runtime)库。
    MinGW 是一组包含文件和端口库,其功能是允许控制台模式的程序使用微软的标准C运行时(C Runtime)库(MSVCRT.DLL),该库在所有的 NT OS 上有效,
    在所有的 Windows 95发行版以上的 Windows OS 有效,使用基本运行时,你可以使用 GCC 写控制台模式的符合美国标准化组织(ANSI)程序,
    可以使用微软提供的 C 运行时(C Runtime)扩展,与基本运行时相结合,就可以有充分的权利既使用 CRT(C Runtime)又使用 WindowsAPI功能。


    二、centos7.2 linux下开发 
    0)(apache安装配置略)


    1)安装 apxs

    yum search apxs #查找apxs安装包,
    yum install httpd-devel #apxs所在包,里面带的有apxs


    2)建立一个开发目录
    mkdir apachemod
    进入apachemod目录
    cd apachemod


    3)用apxs建立一个mod模版
    运行apxs -g -n helloworld(helloworld为模块名),会生成一个叫helloworld的目录和模板代码
    模版代码如下:
    =========================mod_helloworld.c===========================================
    /* 
    **  mod_helloworld.c -- Apache sample helloworld module
    **  [Autogenerated via ``apxs -n helloworld -g'']
    **
    **  To play with this sample module first compile it into a
    **  DSO file and install it into Apache's modules directory 
    **  by running:
    **
    **    $ apxs -c -i mod_helloworld.c
    **
    **  Then activate it in Apache's httpd.conf file for instance
    **  for the URL /helloworld in as follows:
    **
    **    #   httpd.conf
    **    LoadModule helloworld_module modules/mod_helloworld.so
    **    <Location /helloworld>
    **    SetHandler helloworld
    **    </Location>
    **
    **  Then after restarting Apache via
    **
    **    $ apachectl restart
    **
    **  you immediately can request the URL /helloworld and watch for the
    **  output of this module. This can be achieved for instance via:
    **
    **    $ lynx -mime_header http://localhost/helloworld 
    **
    **  The output should be similar to the following one:
    **
    **    HTTP/1.1 200 OK
    **    Date: Tue, 31 Mar 1998 14:42:22 GMT
    **    Server: Apache/1.3.4 (Unix)
    **    Connection: close
    **    Content-Type: text/html
    **  
    **    The sample page from mod_helloworld.c
    */ 


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


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


        if (!r->header_only)
            ap_rputs("小样,用C语言开发一个Apache的Module,这下牛逼了吧</br>在centos7.2上哦 ", r);
        return OK;
    }


    static void helloworld_register_hooks(apr_pool_t *p)
    {
        ap_hook_handler(helloworld_handler, NULL, NULL, APR_HOOK_MIDDLE);
    }


    /* Dispatch list for API hooks */
    module AP_MODULE_DECLARE_DATA helloworld_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       */
        helloworld_register_hooks  /* register hooks                      */
    };
    ====================================================================================
    4)编译并安装:
    apxs -i -a -c mod_helloworld.c #运行之后生成的mod_helloworld.so
    apxs生成之后会自动将
    LoadModule helloworld_module  /usr/lib64/httpd/modules/mod_helloworld.so
    这一行添加到apache.conf 文件中


    centos终端编译效果如下图:


    5)配置apache
    我们要做的就是编辑 apache.conf
    编辑命令:
    vi /etc/httpd/conf/httpd.conf


    找到 LoadModule helloworld_module  /usr/lib64/httpd/modules/mod_helloworld.so 这一行在下面加入


    <Location /helloworld>
     setHandler helloworld
    </Location>


    :wq #进行保存


    6)然后重启apache服务
    service httpd restart
    重启后查看一下咱们的服务状态:
    serice httpd status
    查看一下8080端口(我设置的是8080,你也可以按照你的实际来)
    lsof -i:8080
    出现:
    # lsof -i:8080
    COMMAND    PID   USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
    httpd   142314   root    4u  IPv6 1580018      0t0  TCP *:webcache (LISTEN)
    httpd   142315 apache    4u  IPv6 1580018      0t0  TCP *:webcache (LISTEN)
    httpd   142316 apache    4u  IPv6 1580018      0t0  TCP *:webcache (LISTEN)
    httpd   142317 apache    4u  IPv6 1580018      0t0  TCP *:webcache (LISTEN)
    httpd   142318 apache    4u  IPv6 1580018      0t0  TCP *:webcache (LISTEN)
    httpd   142319 apache    4u  IPv6 1580018      0t0  TCP *:webcache (LISTEN)
    httpd   142320 apache    4u  IPv6 1580018      0t0  TCP *:webcache (LISTEN)
    表示一切正常


    7)在浏览器里面输入http://loacalhost/helloworld,就可以看到我们返回的内容)
    运行结果如下图:


         大功告成


    8)centos的代码和编译后的so 模块下载地址
    http://download.csdn.net/detail/tengyunjiawu_com/9811657


    9)参考资料:

    http://httpd.apache.org/docs/2.2/programs/apxs.html

  • 相关阅读:
    Linux:less 命令
    Linux:more命令
    图解linux安装tomcat(附常用命令)
    Linux下安装tomcat
    Linux数字权限解释
    Tomcat配置远程调试
    CentOS 设置静态IP 方法
    oracle procedure存储过程
    【转】vector中erase()的使用注意事项
    strstr()函数的使用
  • 原文地址:https://www.cnblogs.com/bdccloudy/p/7665217.html
Copyright © 2020-2023  润新知