nginx模块开发初体验
来源:互联网 发布:史克威尔艾尼克斯 知乎 编辑:程序博客网 时间:2024/06/03 09:56
一、先来看看我们想要达到的结果
二、自定义模块首先安装好nginx,再来修改配置文件nginx.conf
server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; } #加入这一段,输入后缀/hello_world是就会调用我们自定义的模块 location /hello_world { hello_world Poechant; } }
然后创建一个目录写自定义的模块
mkdir ngx_http_hello_world_modulecd ngx_http_hello_world_moduletouch ngx_http_hello_world_module.ctouch config
这就是我们的目录结构
- ngx_http_hello_world_module.c文件内容
#include <ngx_config.h>#include <ngx_core.h>#include <ngx_http.h>typedef struct { ngx_str_t output_words;} ngx_http_hello_world_loc_conf_t;// To process HelloWorld command argumentsstatic char* ngx_http_hello_world(ngx_conf_t* cf, ngx_command_t* cmd, void* conf);// Allocate memory for HelloWorld commandstatic void* ngx_http_hello_world_create_loc_conf(ngx_conf_t* cf);// Copy HelloWorld argument to another placestatic char* ngx_http_hello_world_merge_loc_conf(ngx_conf_t* cf, void* parent, void* child);// Structure for the HelloWorld commandstatic ngx_command_t ngx_http_hello_world_commands[] = { { ngx_string("hello_world"), // The command name NGX_HTTP_LOC_CONF | NGX_CONF_TAKE1, ngx_http_hello_world, // The command handler NGX_HTTP_LOC_CONF_OFFSET, offsetof(ngx_http_hello_world_loc_conf_t, output_words), NULL }, ngx_null_command};// Structure for the HelloWorld contextstatic ngx_http_module_t ngx_http_hello_world_module_ctx = { NULL, NULL, NULL, NULL, NULL, NULL, ngx_http_hello_world_create_loc_conf, ngx_http_hello_world_merge_loc_conf};// Structure for the HelloWorld module, the most important thingngx_module_t ngx_http_hello_world_module = { NGX_MODULE_V1, &ngx_http_hello_world_module_ctx, ngx_http_hello_world_commands, NGX_HTTP_MODULE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NGX_MODULE_V1_PADDING};static ngx_int_t ngx_http_hello_world_handler(ngx_http_request_t* r) { ngx_int_t rc; ngx_buf_t* b; ngx_chain_t out[2]; ngx_http_hello_world_loc_conf_t* hlcf; hlcf = ngx_http_get_module_loc_conf(r, ngx_http_hello_world_module); r->headers_out.content_type.len = sizeof("text/plain") - 1; r->headers_out.content_type.data = (u_char*)"text/plain"; b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t)); out[0].buf = b; out[0].next = &out[1]; b->pos = (u_char*)"hello_world, "; b->last = b->pos + sizeof("hello_world, ") - 1; b->memory = 1; b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t)); out[1].buf = b; out[1].next = NULL; b->pos = hlcf->output_words.data; b->last = hlcf->output_words.data + (hlcf->output_words.len); b->memory = 1; b->last_buf = 1; r->headers_out.status = NGX_HTTP_OK; r->headers_out.content_length_n = hlcf->output_words.len + sizeof("hello_world, ") - 1; rc = ngx_http_send_header(r); if (rc == NGX_ERROR || rc > NGX_OK || r->header_only) { return rc; } return ngx_http_output_filter(r, &out[0]);}static void* ngx_http_hello_world_create_loc_conf(ngx_conf_t* cf) { ngx_http_hello_world_loc_conf_t* conf; conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_hello_world_loc_conf_t)); if (conf == NULL) { return NGX_CONF_ERROR; } conf->output_words.len = 0; conf->output_words.data = NULL; return conf;}static char* ngx_http_hello_world_merge_loc_conf(ngx_conf_t* cf, void* parent, void* child) { ngx_http_hello_world_loc_conf_t* prev = parent; ngx_http_hello_world_loc_conf_t* conf = child; ngx_conf_merge_str_value(conf->output_words, prev->output_words, "Nginx"); return NGX_CONF_OK;}static char* ngx_http_hello_world(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_hello_world_handler; ngx_conf_set_str_slot(cf, cmd, conf); return NGX_CONF_OK;}
- config文件内容
ngx_addon_name=ngx_http_hello_world_moduleHTTP_MODULES="$HTTP_MODULES ngx_http_hello_world_module"NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_hello_world_module.c"
三、开始编译安装
- 到nginx安装包目录下重新编译自定义的模块–add-module路径填你自定义模块的位置
./configure --prefix=/usr/local/nginx --add-module=/home/zzq/software/ngx_http_hello_world_module
- 编译是会有提示的,会提示你新增了哪些模块,然后
makemake install
一切执行完后,没报错一般都是成功了的,然后重启nginx,就可以输入http://你的ip:port/hello_world测试下。
阅读全文
0 0
- nginx模块开发初体验
- Nginx基础知识. Nginx模块开发
- Nginx模块开发入门
- Nginx模块开发入门
- nginx模块开发
- nginx模块开发说明
- Nginx模块开发
- NGINX模块开发
- Nginx Http模块开发
- Nginx 模块开发
- Nginx模块开发入门
- Nginx模块开发入门
- nginx模块开发指南
- Nginx模块开发入门
- NGINX模块开发入门
- Nginx模块开发实战
- Nginx模块开发
- nginx模块开发入门
- 3XML 语法规则
- Android Stuido app工程手机图标变成咖啡杯图标
- 最大堆
- maven中依赖管理的详细解说
- Android-studio的Error总结
- nginx模块开发初体验
- linux下安装vpn服务器和vpn客户端
- jQuery -- touch事件之滑动判断(左右上下方向)
- Date和String类型相互转换
- 三子棋的实现
- PowerDesigner15使用时的十五个问题
- Java多线程中synchronized关键字的使用方法
- 林元庆离开百度后创办AIbee 估值已达8亿人民币 | 资讯
- 快上车!通用自主开发无人驾驶汽车首次公开试驾 | 精选