Nginx模块示例
来源:互联网 发布:软件著作权怎么缴费 编辑:程序博客网 时间:2024/05/27 00:28
/** lijk@infosec.com.cn*/#include <ngx_config.h>#include <ngx_core.h>#include <ngx_http.h>typedef struct ngx_http_infosec_loc_conf_s{ ngx_str_t print;}ngx_http_infosec_loc_conf_t;static void *ngx_http_infosec_create_loc_conf(ngx_conf_t *cf);static char *ngx_http_infosec_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child);static char *ngx_http_infosec_print(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);static ngx_command_t ngx_http_infosec_commands[] = { { ngx_string("print"), NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1, ngx_http_infosec_print, NGX_HTTP_LOC_CONF_OFFSET, offsetof(ngx_http_infosec_loc_conf_t, print), NULL }, ngx_null_command};static ngx_http_module_t ngx_http_infosec_module_ctx = { NULL, NULL, NULL, NULL, NULL, NULL, ngx_http_infosec_create_loc_conf, ngx_http_infosec_merge_loc_conf};ngx_module_t ngx_http_infosec_module = { NGX_MODULE_V1, &ngx_http_infosec_module_ctx, ngx_http_infosec_commands, NGX_HTTP_MODULE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NGX_MODULE_V1_PADDING};static void *ngx_http_infosec_create_loc_conf(ngx_conf_t *cf){ ngx_http_infosec_loc_conf_t *conf; conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_infosec_loc_conf_t)); if(conf == NULL) { return NGX_CONF_ERROR; } ngx_str_null(&conf->print); ngx_conf_log_error(NGX_LOG_DEBUG, cf, 0, "create_loc_conf: %s", conf->print.data ? conf->print.data : (u_char*)"null"); return conf;}static char *ngx_http_infosec_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child){ ngx_http_infosec_loc_conf_t *prev = parent; ngx_http_infosec_loc_conf_t *conf = child; ngx_conf_merge_str_value(conf->print, prev->print, "null"); ngx_conf_log_error(NGX_LOG_DEBUG, cf, 0, "merge_loc_conf: %s", conf->print.data ? conf->print.data : (u_char*)"null"); return NGX_CONF_OK;}static ngx_int_t ngx_http_infosec_print_handler(ngx_http_request_t *r){ ngx_int_t rc; ngx_buf_t *b; ngx_chain_t out; ngx_http_infosec_loc_conf_t *conf; conf = ngx_http_get_module_loc_conf(r, ngx_http_infosec_module); if(!(r->method & (NGX_HTTP_HEAD|NGX_HTTP_GET|NGX_HTTP_POST))) { return NGX_HTTP_NOT_ALLOWED; } r->headers_out.content_type.len = sizeof("text/html") - 1; r->headers_out.content_type.data = (u_char*)"text/html"; r->headers_out.status = NGX_HTTP_OK; r->headers_out.content_length_n = conf->print.len; if(r->method == NGX_HTTP_HEAD) { return ngx_http_send_header(r); } b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t)); if(b == NULL) { return NGX_HTTP_INTERNAL_SERVER_ERROR; } out.buf = b; out.next = NULL; b->pos = conf->print.data; b->last = conf->print.data + (conf->print.len); b->memory = 1; b->last_buf = 1; rc = ngx_http_send_header(r); if(rc != NGX_OK) { return rc; } ngx_log_error(NGX_LOG_DEBUG, r->connection->log, 0, "handler: %s", conf->print.data ? conf->print.data : (u_char*)"null"); return ngx_http_output_filter(r, &out);}static char *ngx_http_infosec_print(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_infosec_print_handler; ngx_conf_set_str_slot(cf, cmd, conf); ngx_conf_log_error(NGX_LOG_DEBUG, cf, 0, "set: %s", clcf->name.data ? clcf->name.data : (u_char*)"null"); return NGX_CONF_OK;}
1 0
- Nginx模块示例
- NGINX模块
- nginx模块
- nginx模块
- 详解Nginx中的geo模块与利用其配置负载均衡的示例
- Nginx模块-lua-nginx-module
- Nginx基础知识. Nginx模块开发
- Nginx基础. Nginx模块上下文
- nginx+fast-nginx-module模块
- Nginx proxy_cache 使用示例
- 【NGINX】虚拟主机配置示例
- Nginx 负载均衡示例
- nginx完整配置示例
- nginx rewrite 相关示例
- nginx subrequest程序示例
- nginx--优化配置示例
- nginx配置示例
- gdb调试nginx示例
- python日期和时间
- scala REPL中加载第三方jar包
- 读取sd卡下图片,由图片路径转换为bitmap
- 阅读提升领导力——领导者应该多读书
- iOS 解决LaunchScreen中图片加载黑屏问题
- Nginx模块示例
- 参考<<精通正则表达式>>一书对我们ETL log解析模块一个正则的优化
- 【学习笔记】NGUI中为Popup Menu添加点击事件响应
- MAC下 WinShark 的Android抓包方法
- jstl中处理日期格式,小数,数字,百分比 fmt
- tableView的section不停留在顶部
- postgresql 数据类型转换,日期操作函数
- iOS倒计时,显示剩余天、时、分、秒
- 读《C程序设计语言》2E-3 [1~3]章