本例子实现了一个简单的hello world程序。运行效果:

虚拟机Ubuntu中:

win7中chrome浏览器:

一、config文件编写
Nginx提供了一种简单的方式将第三方的模块编译到Nginx中。首先把源代码文件全部放到一个目录下,同时在该目录中编写一个文件用于通知Nginx如何编译本模块,这个文件名必须为config。
然后,在configure脚本执行时加入参数--add-module=PATH(新模块源代码以及config文件存放目录),就可以在执行政策编译安装流程时完成Nginx编译工作。
config文件格式
config文件其实是一个可执行的Shell脚本,如果只想开发一个HTTP模块,需要定义三个变量:
(1)ngx_adon_name。
仅在configure执行时使用,一般设置为模块名称。
(2)HTTP_MODULES。
保存所有的HTTP模块名称。每个模块间由空格相连。在重新设置这个变量时,不要直接覆盖,因此要如下设置:
"$HTTP_MODULES ngx_http_mytest_module"
(3)NGX_ADDON_SRCS。
用于指定新模块的源代码,多个待编译的源代码之间可以用空格相连。
注意,在设置这个变量时可以使用$ngx_addon_dir变量,它等价于configure执行时--add-module=PATH的PATH参数。
因此本例中的config文件内容如下:
ngx_addon_name=ngx_http_mytest_module
HTTP_MODULES="$HTTP_MODULES ngx_http_mytest_module"
NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_mytest_module.c"
二、修改配置文件
/usr/local/nginx/conf/nginx.conf
添加下面内容:

三、定义HTTP模块及处理用户请求
源代码:
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>static ngx_int_t ngx_http_mytest_handler(ngx_http_request_t *r);
static char *
ngx_http_mytest(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
//处理配置项
static ngx_command_t ngx_http_mytest_commands[] = {{ngx_string("mytest"),NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LMT_CONF|NGX_CONF_NOARGS,ngx_http_mytest,NGX_HTTP_LOC_CONF_OFFSET,0,NULL},ngx_null_command
};
//模块上下文
static ngx_http_module_t ngx_http_mytest_module_ctx = {NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
};
//新模块定义
ngx_module_t ngx_http_mytest_module = {NGX_MODULE_V1,&ngx_http_mytest_module_ctx,ngx_http_mytest_commands,NGX_HTTP_MODULE,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NGX_MODULE_V1_PADDING
};//配置项对应的回调函数
static char *
ngx_http_mytest(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
{ngx_http_core_loc_conf_t *clcf;clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);clcf->handler = ngx_http_mytest_handler;return NGX_CONF_OK;
}//实际完成处理的回调函数
static ngx_int_t ngx_http_mytest_handler(ngx_http_request_t *r)
{if (!(r->method & (NGX_HTTP_GET | NGX_HTTP_HEAD))) {return NGX_HTTP_NOT_ALLOWED;}ngx_int_t rc = ngx_http_discard_request_body(r);if (rc != NGX_OK) {return rc;}ngx_str_t type = ngx_string("text/plain");ngx_str_t response = ngx_string("Hello World");r->headers_out.status = NGX_HTTP_OK;r->headers_out.content_length_n = response.len;r->headers_out.content_type = type;rc = ngx_http_send_header(r);if (rc == NGX_ERROR || rc > NGX_OK || r->header_only) {return rc;}ngx_buf_t *b;b = ngx_create_temp_buf(r->pool, response.len);if (b == NULL) {return NGX_HTTP_INTERNAL_SERVER_ERROR;}ngx_memcpy(b->pos, response.data, response.len);b->last = b->pos + response.len;b->last_buf = 1;ngx_chain_t out;out.buf = b;out.next = NULL;return ngx_http_output_filter(r, &out);
}

四、编译安装新模块

编译安装新模块的命令如下:

./configure --prefix=/usr/local/nginx(指定安装部署后的根目录) --add-module=/home/nginx(新模块存放目录)
make
sudo make install

五、参考资料:

《深入理解Ngnix》

淘宝tengine

nginx模块开发入门

Nginx学习之一-第一个程序Hello World相关推荐

  1. Spark学习之第一个程序打包、提交任务到集群

    1.免秘钥登录配置: ssh-keygen cd .ssh touch authorized_keys cat id_rsa.pub > authorized_keys chmod 600 au ...

  2. 2022年12月1日,加入bite的第一天学习的第一个程序

    #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() {     printf("Hello Bit!!!&q ...

  3. 第一个程序---汇编学习笔记

    第四章 第一个程序 4.1 一个源程序从写出到执行的过程 一个汇编语言程序从写到最终执行的简要过程. 编写汇编源程序 对源程序进行编译连接 执行可执行文件中的程序 如图所示: 4.2 源程序 程序代码 ...

  4. 第一个程序03 - 零基础入门学习汇编语言22

    第四章:第一个程序03 让编程改变世界 Change the world by program 可执行文件中的程序装入内存并运行的原理 在DOS中,可执行文件中的程序P1若要运行,必须有一个正在运行的 ...

  5. 学习Matlab的第一个程序——用二分法求根

    学习Matlab的第一个程序--用二分法求根 问题描述 matlab代码 遇到的一些问题和心得体会 问题描述 对于一个给定的方程f(x)=0和零点的大致区间(a,b),用二分法将区间(a,b)缩小,当 ...

  6. 程序猿编程课堂 Python学习之入门篇1:环境搭建与第一个程序

    前言: Python作为目前比较热门的编程语言,其简单和简洁的语法使它成为一种非常好的通用编程语言,它是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),并且随着版本的不断更新和 ...

  7. Windows网络编程案例教程-董相志 学习记录 第一个网络程序hostent

    <Windows网络编程案例教程>-董相志 学习记录 第一个网络程序hostent 第一章 网络编程概述 1.3.5第一个网络程序--hostent 对主机的名称和地址解析 WinSock ...

  8. Lichee_RV学习系列---认识Lichee Rv Dock、环境搭建和编译第一个程序

    Lichee Rv Dock学习系列文章目录 文章目录 Lichee Rv Dock学习系列文章目录 前言 一.认识Lichee RV 1.D1-H 芯片 2.Lichee RV开发板 3.系统镜像 ...

  9. 【C语言篇】学习计算机之路——第一个程序

    序 我这一生所追求的,只不过是在一个有你的时间,一个有你在的地方. 嗨,这里是狐狸~~ 今天是2021年12月28日,距离2022年只剩3天啦,大家都准备怎么跨年呢,我估计要在公司跨年了,唉,生活不易 ...

最新文章

  1. 【MySQL】求每门科目成绩排名前二的学生信息
  2. linux高可用性,linux – 高可用性Cron Jobs
  3. 201771010102 常惠琢 《2018面向对象程序设计(Java)》第9周学习总结
  4. oracle的常用sql
  5. spring4.x aop拦截spring mvc controller
  6. 后端需要掌握的技术_何小伟:软件测试需要掌握的技术?
  7. Java简单记事本设计实验报告_java记事本实验报告
  8. 禅道 mysql 远程连接_远程访问禅道开源版数据库(基于docker)
  9. ​知者见于未萌:百度CTO王海峰与中国 AI 三十年
  10. dejavu中如何添加html文件,DejaVu术语库的建立与导入.pdf
  11. cocos 躲避球游戏(1) --创建项目和场景切换
  12. 【随便聊聊】Mac 笔记本该怎么选?
  13. html5是什么意思,html5是什么意思?
  14. html热区坐标,HTML之六:图像的热区连接
  15. NAXX Demo2_WYQ_01
  16. 模块化封装和组件化封装
  17. 【学习笔记】噬菌体的应用与展望
  18. ICESat2数据hd5文件的预处理
  19. C语言实现KTV歌曲系统
  20. 智能汽车-ICALL、BCALL、ECALL都是啥

热门文章

  1. HTML5游戏-看你有多色
  2. 广州python平均薪资_11 月全国程序员平均工资出炉,看看的你得薪资跟上平均水平了吗。...
  3. layui响应式:隐藏与显示(class 类名后缀)
  4. IE浏览器兼容性处理与提示
  5. 高端大气上档次的官网介绍导航页源码
  6. 发起ajax请求很慢,为什么我的Ajax请求比一般的浏览器请求慢得多?
  7. NDPIC极简昼夜瀑布流图片WordPress主题
  8. 新浪微博视频批量上传大师 v3.1
  9. 百度SEO最新小某云商城系统源码 免授权V1.61版
  10. 商城小程序源码开源版-可二开