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上哦\n", 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

C语言-apache mod(模块开发)-采用apxs开发实战(centos7.2 linux篇)的更多相关文章

  1. C语言-apache mod(模块开发)-采用VS2017开发实战(windows篇)

    C语言-apache mod(模块开发)-采用VS2017开发实战(windows篇) 名词解释:apxs apxs is a tool for building and installing ext ...

  2. 软件开发流变史:从瀑布开发到敏捷开发再到DevOps

    作为在20世纪70年代.80年代盛极一时的软件开发模型,瀑布模型通过制定计划.需求分析.软件设计.程序编写.软件测试.运行维护等6个流程将整个软件生命周期衔接起来.这6个流程有着严格的先后次序之分,只 ...

  3. Apache Solr采用Java开发、基于Lucene的全文搜索服务器

    http://docs.spring.io/spring-data/solr/ 首先介绍一下solr: Apache Solr (读音: SOLer) 是一个开源.高性能.采用Java开发.基于Luc ...

  4. Apache不重新编译,利用apxs工具给Apache添加模块,如cgi模块

    想实践下Apache是如何运行cgi程序的,却发现先前编译安装Apache的时候,没有安装Apache的cgi模块. 附:CentOS6.x编译安装LAMP(2):编译安装 Apache2.2.25 ...

  5. Apache Mod/Filter Development

    catalog . 引言 . windows下开发apache模块 . mod进阶: 接收客户端数据的 echo 模块 . mod进阶: 可配置的 echo 模块 . mod进阶: 过滤器 0. 引言 ...

  6. OSGi 系列(一)之什么是 OSGi :Java 语言的动态模块系统

    OSGi 系列(一)之什么是 OSGi :Java 语言的动态模块系统 OSGi 的核心:模块化.动态.基于 OSGi 就可以模块化的开发 java 应用,模块化的部署 java 应用,还可以动态管理 ...

  7. 10个强大的Apache开源模块

    1.单点登录模块 LemonLDAP LemonLdap可以很棒地实现Apache的SSO功能,并且可以处理超过 20 万的用户请求.LemonLdap支持Java, PHP, .Net, Perl, ...

  8. OSGi是什么:Java语言的动态模块系统(一)

    OSGi是什么 OSGi亦称做Java语言的动态模块系统,它为模块化应用的开发定义了一个基础架构.OSGi容器已有多家开源实现,比如Knoflerfish.Equinox和Apache的Felix.您 ...

  9. 开启Apache mod_rewrite模块(解决404 Not Found)

    网站搭建完成了,进入登录界面就是访问不了. 原因大概是没有开启Apache mod_rewrite模块,或者没有配置完全. 步骤1: 启用mod_rewrite模块 在conf目录的httpd.con ...

随机推荐

  1. hdu-1050(贪心+模拟)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1050 思路:由图可知,1对应2,3对应4,以此类推,如果x,y是偶数则变为奇数: 每次输入两个区间,找 ...

  2. 37 The Benefits of Cutting Salt 减少盐分摄取量的益处

    The Benefits of Cutting Salt 减少盐分摄取量的益处 ①Just when you had figured out how to manage fat in your die ...

  3. Americans are usually tolerant (Listen speak of Unit 2)

    Americans are usually 1) tolerant of non-native speakers who have some 2) trouble understanding Engl ...

  4. Java实现wc部分功能

    GitHub仓库:https://github.com/TaoTaoLv1/WcProject 一.开发前PSP表格预估* PSP2.1 Personal Software Process Stage ...

  5. EBS FORM 编译

    http://www.cnblogs.com/quanweiru/archive/2013/01/01/2841574.html EBS R11============================ ...

  6. 通过css使用background-color为背景图添加遮罩效果

    一个div同时设置background-color和background-image的话,color是处于img层下方的,无法实现遮罩效果,所以需要再创建一个div作为其子div,然后设置子div的背 ...

  7. IIS配置404页面配置,IIS自定义404页面

    .NET 环境下 用到404页的场景一般有两种: 场景一:报黄页,程序性的错误,代码层可以捕捉到的. 场景二:用户输入不存在的页面,代码层捕捉不到的. IIS 默认会有404的配置,不过这种呈现出的都 ...

  8. 打开SQL2008R2配置工具,提示远程调用失败[0x800706be]

    卸载了Microsoft SQL Server 2012 Express LocalDB,依然不行. 再卸载Microsoft SQL Server 2014 LocalDB,此时右边显示框已可以显示 ...

  9. wpf datagrid 隔行变色

    <DataGrid AlternationCount="2"> <DataGrid.RowStyle> <Style TargetType=" ...

  10. Godot开发环境与学习资源

    记得第一次听到Godot的名字时还在深圳工作,刚刚接触Unity快一年,只是匆匆在Github上star了,就没有继续了.后面时不时翻开它的Git主页,然而一直没有下载过,每每想看看开源引擎都去看Or ...