- 浏览: 1475280 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (691)
- linux (207)
- shell (33)
- java (42)
- 其他 (22)
- javascript (33)
- cloud (16)
- python (33)
- c (48)
- sql (12)
- 工具 (6)
- 缓存 (16)
- ubuntu (7)
- perl (3)
- lua (2)
- 超级有用 (2)
- 服务器 (2)
- mac (22)
- nginx (34)
- php (2)
- 内核 (2)
- gdb (13)
- ICTCLAS (2)
- mac android (0)
- unix (1)
- android (1)
- vim (1)
- epoll (1)
- ios (21)
- mysql (3)
- systemtap (1)
- 算法 (2)
- 汇编 (2)
- arm (3)
- 我的数据结构 (8)
- websocket (12)
- hadoop (5)
- thrift (2)
- hbase (1)
- graphviz (1)
- redis (1)
- raspberry (2)
- qemu (31)
- opencv (4)
- socket (1)
- opengl (1)
- ibeacons (1)
- emacs (6)
- openstack (24)
- docker (1)
- webrtc (11)
- angularjs (2)
- neutron (23)
- jslinux (18)
- 网络 (13)
- tap (9)
- tensorflow (8)
- nlu (4)
- asm.js (5)
- sip (3)
- xl2tp (5)
- conda (1)
- emscripten (6)
- ffmpeg (10)
- srt (1)
- wasm (5)
- bert (3)
- kaldi (4)
- 知识图谱 (1)
最新评论
-
wahahachuang8:
我喜欢代码简洁易读,服务稳定的推送服务,前段时间研究了一下go ...
websocket的helloworld -
q114687576:
http://www.blue-zero.com/WebSoc ...
websocket的helloworld -
zhaoyanzimm:
感谢您的分享,给我提供了很大的帮助,在使用过程中发现了一个问题 ...
nginx的helloworld模块的helloworld -
haoningabc:
leebyte 写道太NB了,期待早日用上Killinux!么 ...
qemu+emacs+gdb调试内核 -
leebyte:
太NB了,期待早日用上Killinux!
qemu+emacs+gdb调试内核
决定重新整理nginx模块开发
helloworld
config
ngx_http_mytest_module.c
./configure --prefix=/usr/local/nginx --add-module=/opt/chapter3/helloworld
make
./configure --prefix=/usr/local/nginx --add-module=/opt/chapter3/helloworld
#./configure --with-debug --prefix=/usr/local/nginx --add-module=/opt/chapter3/helloworld
#CFLAGS="-g3 -O0" ./configure --prefix=/usr/local/nginx --with-debug --add-module=/opt/chapter3/helloworld
#./configure --with-cc-opt='-ggdb3 -O0' --prefix=/usr/local/nginx --with-debug
make
#make CFLAGS="-ggdb3 -O0"
grep -nR hello *
/opt/nginx-1.13.3/objs/addon/helloworld
vim /usr/local/nginx/conf/nginx.conf
location /hello {
mytest;
}
###########
curl localhost/hello
如果带-ggdb3 或-g3
info macro
如果没有需要l一下
gdb /usr/local/nginx/sbin/nginx
或gdb -p `nginx的worker进程`
切换到子进程
r
info macro
找nginx的worker进程
gdb -q -p `pidof nginx`
helloworld
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"
ngx_http_mytest_module.c
#include <ngx_config.h> #include <ngx_core.h> #include <ngx_http.h> #define HELLO 42 static char * ngx_http_mytest(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); static ngx_int_t ngx_http_mytest_handler(ngx_http_request_t *r); 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,/* preconfiguration */ NULL,/* postconfiguration */ NULL,/* create main configuration */ NULL,/* init main configuration */ NULL,/* create server configuration */ NULL,/* merge server configuration */ NULL,/* create location configuration */ NULL /* merge location configuration */ }; ngx_module_t ngx_http_mytest_module = { NGX_MODULE_V1, &ngx_http_mytest_module_ctx,/* module context */ ngx_http_mytest_commands, /* module directives */ NGX_HTTP_MODULE, /* module type */ NULL, /* init master */ NULL, /* init module */ NULL, /* init process */ NULL, /* init thread */ NULL, /* exit thread */ NULL, /* exit process */ NULL, /* exit master */ 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; //首先找到mytest配置项所属的配置块,clcf貌似是location块内的数据 //结构,其实不然,它可以是main、srv或者loc级别配置项,也就是说在每个 //http{}和server{}内也都有一个ngx_http_core_loc_conf_t结构体 clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module); //http框架在处理用户请求进行到NGX_HTTP_CONTENT_PHASE阶段时,如果 //请求的主机域名、URI与mytest配置项所在的配置块相匹配,就将调用我们 //实现的ngx_http_mytest_handler方法处理这个请求 clcf->handler = ngx_http_mytest_handler; return NGX_CONF_OK; } static ngx_int_t ngx_http_mytest_handler(ngx_http_request_t *r) { int watchpoint = 12; printf("this is ngx_hello %d \n",HELLO); ngx_log_error(NGX_LOG_ERR, r->connection->log, 0," haoning error \n"); //必须是GET或者HEAD方法,否则返回405 Not Allowed 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; } //设置返回的Content-Type。注意,ngx_str_t有一个很方便的初始化宏 //ngx_string,它可以把ngx_str_t的data和len成员都设置好 ngx_str_t type = ngx_string("text/plain"); //返回的包体内容 ngx_str_t response = ngx_string("Hello World!"); //设置返回状态码 r->headers_out.status = NGX_HTTP_OK; //响应包是有包体内容的,所以需要设置Content-Length长度 r->headers_out.content_length_n = response.len; //设置Content-Type r->headers_out.content_type = type; //发送http头部 rc = ngx_http_send_header(r); if (rc == NGX_ERROR || rc > NGX_OK || r->header_only) { return rc; } //构造ngx_buf_t结构准备发送包体 ngx_buf_t *b; b = ngx_create_temp_buf(r->pool, response.len); watchpoint = 42; if (b == NULL) { return NGX_HTTP_INTERNAL_SERVER_ERROR; } //将Hello World拷贝到ngx_buf_t指向的内存中 ngx_memcpy(b->pos, response.data, response.len); //注意,一定要设置好last指针 b->last = b->pos + response.len; //声明这是最后一块缓冲区 b->last_buf = 1; //构造发送时的ngx_chain_t结构体 ngx_chain_t out; //赋值ngx_buf_t out.buf = b; //设置next为NULL out.next = NULL; //最后一步发送包体,http框架会调用ngx_http_finalize_request方法 //结束请求 return ngx_http_output_filter(r, &out); }
./configure --prefix=/usr/local/nginx --add-module=/opt/chapter3/helloworld
make
./configure --prefix=/usr/local/nginx --add-module=/opt/chapter3/helloworld
#./configure --with-debug --prefix=/usr/local/nginx --add-module=/opt/chapter3/helloworld
#CFLAGS="-g3 -O0" ./configure --prefix=/usr/local/nginx --with-debug --add-module=/opt/chapter3/helloworld
#./configure --with-cc-opt='-ggdb3 -O0' --prefix=/usr/local/nginx --with-debug
make
#make CFLAGS="-ggdb3 -O0"
grep -nR hello *
/opt/nginx-1.13.3/objs/addon/helloworld
vim /usr/local/nginx/conf/nginx.conf
location /hello {
mytest;
}
###########
curl localhost/hello
如果带-ggdb3 或-g3
info macro
如果没有需要l一下
gdb /usr/local/nginx/sbin/nginx
或gdb -p `nginx的worker进程`
set args -c /usr/local/nginx/conf/nginx.conf b ngx_cycle.c:1264 b ngx_http_mytest_module.c:63 set follow-fork-mode child
切换到子进程
r
info macro
找nginx的worker进程
gdb -q -p `pidof nginx`
发表评论
-
ios的safari使用自制ca证书测试webrtc
2018-08-20 13:31 2433这个需要注意 https://stackoverflow.c ... -
nginx push_upstream模块的websocket
2018-05-04 23:27 1215参考 https://www.rails365.net/art ... -
openresty聊天室的helloworld
2018-04-22 19:25 796openresty的websocket + redis的sub ... -
openresty websocket
2018-04-18 17:08 1512mac安装openresty brew install o ... -
nginx模块开发(三)upstream模块
2017-08-20 23:48 843使用nginx-1.13.4版本 三个文件ngx_http_ ... -
nginx模块开发(二) 使用gdb-dashboard调试
2017-08-11 18:47 2002gdb-dashboard或者 gdbgui 或者gdb自带 ... -
nginx带进度条的上传超大文件
2016-12-12 18:40 386911年写的 http://haoningabc.iteye.c ... -
nginx rewrite替代apache rewrite
2016-10-18 20:30 831清理chrome的缓存 chrome://appcache-i ... -
ffmpeg+nginx 的直播(2,直播摄像头和麦克风)
2016-05-28 20:21 4355假设我的服务器是centos7 192.168.139.117 ... -
ffmpeg+nginx 的直播(1,直播播放的视频文件)
2016-05-26 17:11 659064位操作系统centos7 ############ 1.一 ... -
nginx执行流程
2014-04-15 18:35 1080目标:打印nginx执行之后的流程方法 my_debug.c ... -
graphviz绘制nginx函数调用图
2014-04-14 18:43 1462以下是c的版本 c++代码去 http://www.cnblo ... -
nginx的远程调用模块
2014-03-24 14:31 2769在tx工作的时候,自己的虚拟机总是连接不上,公司封了ssh端口 ... -
通过nginx远程执行shell
2014-03-03 10:26 5081saltstack远程执行shell,远程管理等返回json已 ... -
nginx的upstream模块
2014-01-17 17:37 3204参考http://nginx.weebly.com/31034 ... -
nginx调试日志的几种方法
2013-10-17 22:54 23314最简单的方式就是 fprintf(stderr, &qu ... -
nginx HttpSecureLinkModule 过期token验证模块
2012-11-07 02:15 6084用途,确认一个链接比如下载pdf,在一定有效期内有用 可以加 ... -
nginx 上传进度条
2012-11-01 16:24 7606费劲周折,一晚上终于搞定了,nginx版本1.38 ----- ... -
ubuntu装openrestry
2012-03-01 00:16 1328apt-get install make apt-get in ... -
udp的socket的helloworld
2011-12-07 00:56 1100来自百度 [root@red54apple test]# ...
相关推荐
总的来说,nginx模块开发指南不仅为初学者提供了一个入门的平台,还深入到nginx模块开发的许多高级特性。这个指南覆盖了nginx模块开发的方方面面,包括预备知识、模块任务委派、模块组成以及如何处理HTTP请求等关键...
《Nginx模块开发指南》是一本专注于讲解如何利用C++11和Boost库进行Nginx模块开发的专业书籍。Nginx作为一个高性能的HTTP和反向代理服务器,其强大的可扩展性使得开发者可以通过编写模块来实现特定的功能,以满足...
深入理解Nginx模块开发与架构解析(完整版) pdf,nginx必备知识
关于Nginx模块开发的学习资源相对较少,《Emiller's Guide To Nginx Module Development》是一篇经典的文章,但其中的部分内容可能因Nginx版本更新而不适用。因此,对于初学者而言,最好的学习方式是从官方文档开始...
深入理解Nginx模块开发及架构解析,深入理解Nginx模块开发及架构解析
通过这个例子,开发者可以学习到Nginx模块开发的基本流程,从而能够根据实际需求创建自己的模块,增强Nginx的功能。这个过程涉及到了C语言编程、Nginx API理解和配置文件解析等多个方面,对提升Nginx的使用和开发...
Nginx模块开发与架构详解
书中首先通过介绍官方Nginx的基本用法和配置规则,帮助读者了解一般Nginx模块的用法,然后重点介绍了女口何开发HTTP模块(含HTTP过滤模块)来得到定制化的Nginx,其中包括开发—个功能复杂的模块所需要了解的各种知识...
《深入理解Nginx模块开发与架构解析(第2版)》是一本专注于Nginx技术的专业书籍,针对Nginx的内部工作机制和模块开发进行了深入的探讨。本书旨在帮助读者掌握Nginx的核心概念、架构设计以及如何进行模块开发,从而...
深入理解Nginx模块开发与架构解析.深入理解Nginx模块开发与架构解析.
《Nginx模块开发指南:使用C++11和Boost程序库》是由罗剑锋编著的一本专业书籍,主要面向对Nginx有深入兴趣并希望通过编程扩展其功能的技术人员。这本书详细介绍了如何利用现代C++11特性和Boost库来开发高效的Nginx...
《Nginx深入理解Nginx模块开发与架构解析(第2版)》是一本针对Nginx技术的深入解析书籍,旨在帮助读者理解和掌握Nginx的核心设计理念以及如何进行高效的模块开发。这本书是该领域经典著作的更新版本,不仅延续了前一...
Nginx模块开发OpenResty简单使用笔记整理 ### Nginx简介 Nginx是当前最流行的HTTP Server之一,根据W3Techs的统计,目前世界排名(根据Alexa)前100万的网站中。与Apache相比。 同时,大量的第三方扩展模块也令...
《深入理解Nginx模块开发与架构解析》第二版是一本专为Nginx开发者和运维人员准备的深度学习资料。这本书旨在帮助读者全面掌握Nginx的核心原理、模块开发及系统架构,从而更好地利用Nginx进行高性能的Web服务构建。 ...
深入理解Nginx模块开发与架构解析第2版LinuxUnix技术丛书 mobi格式,可以下载mobi阅读器打开
Emiller的Nginx模块开发心得是一篇针对Nginx模块开发者的实用指南,由Evan Miller撰写,并由YaoWeibin翻译成中文。本文档主要介绍了如何为Nginx构建自定义模块,这对于扩展Nginx的功能至关重要。以下是详细的知识点...