nginx模块简单开发(发送字符串方式)
2016-08-20 18:32
543 查看
直接定义一个字符串,用返回字符串的返回到客户端
这种方式直接使用字符串返回,显示在客户端页面上。
/* zhuheming 20160811 */ #include <ngx_config.h> #include <ngx_core.h> #include <ngx_http.h> //定义字符串 static char ngx_http_echo_page[] = "<html>" CRLF "<head><title>Welcome to nginx!,I am zhuheming</title></head>" CRLF "<body bgcolor=\"white\" text=\"black\">" CRLF "<center><h2>Welcome to nginx! I am zhuheming</h2></p></p></p></p></center>" CRLF "<h2>I am zhuheming</h2>" CRLF "</center>" CRLF "</body>" CRLF "</html>"; //创建loc配置结构的函数 static void * ngx_http_echo_create_loc_conf(ngx_conf_t *cf); //融合loc配置结构 static char * ngx_http_echo_merge_loc_conf(ngx_conf_t *cf,void *parent,void *child); //接收到报文之后具体处理的函数 static ngx_int_t ngx_http_echo_handler(ngx_http_request_t *r); //存放loc配置文件的结构 typedef struct{ ngx_str_t ed; }ngx_http_echo_loc_conf_t; //存放配置参数函数 static char * ngx_http_echo(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_echo_handler; //ngx_conf_set_str_slot(cf,cmd,conf); return NGX_CONF_OK; } static ngx_command_t ngx_http_echo_commands[]={ {ngx_string("echo"), NGX_HTTP_LOC_CONF|NGX_CONF_NOARGS, ngx_http_echo, NGX_HTTP_LOC_CONF_OFFSET, offsetof(ngx_http_echo_loc_conf_t,ed), NULL }, ngx_null_command }; //配置文件处理的各个阶段都不做操作 static ngx_http_module_t ngx_http_echo_module_ctx ={ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; ngx_module_t ngx_http_echo_module = { NGX_MODULE_V1, &ngx_http_echo_module_ctx, ngx_http_echo_commands, NGX_HTTP_MODULE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NGX_MODULE_V1_PADDING }; static void * ngx_http_echo_create_loc_conf(ngx_conf_t *cf) { ngx_http_echo_loc_conf_t *conf; conf=ngx_pcalloc(cf->pool,sizeof(ngx_http_echo_loc_conf_t)); if(conf==NULL){ return NGX_CONF_ERROR; } conf->ed.len=0; conf->ed.data=NULL; return conf; } static char * ngx_http_echo_merge_loc_conf(ngx_conf_t *cf,void *parent,void *child) { ngx_http_echo_loc_conf_t *prev=parent; ngx_http_echo_loc_conf_t *conf=child; ngx_conf_merge_str_value(conf->ed,prev->ed,""); return NGX_CONF_OK; } //设置报文头和报文体,并发送给报文头处理函数和报文体过滤函数 static ngx_int_t ngx_http_echo_handler(ngx_http_request_t *r) { ngx_int_t rc; ngx_buf_t *b; ngx_chain_t out; ngx_str_t htmlcontent=ngx_string(ngx_http_echo_page); 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 = htmlcontent.len; if(r->method == NGX_HTTP_HEAD) { ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "send head method to client!"); rc = ngx_http_send_header(r); if(rc != NGX_OK) { return rc; } } ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "send not head method to client!"); b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t)); if(b == NULL) { ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "Failed to allocate response buffer."); return NGX_HTTP_INTERNAL_SERVER_ERROR; } out.buf = b; out.next = NULL; b->pos = htmlcontent.data; b->last = htmlcontent.data + (htmlcontent.len); b->memory = 1; rc = ngx_http_send_header(r); if(rc != NGX_OK) { return rc; } b->last_in_chain=1; b->last_buf = 1; ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "send http outputfilter !"); if(ngx_http_output_filter(r, &out)==NGX_OK){ ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "send http outputfilter OK!"); return NGX_OK; }else{ ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "send http outputfilter FAILE!"); return NGX_ERROR; } }
这种方式直接使用字符串返回,显示在客户端页面上。
相关文章推荐
- nginx的http模块开发(直接发送html文件方式)
- 【Nginx】开发一个简单的HTTP模块
- Nginx模块开发之最简单的Hello模块
- nginx实现简单模块开发
- nginx 开发一个简单的 HTTP 模块
- 【Nginx】开发一个简单的HTTP模块
- Nginx模块开发之最简单的Hello模块
- Nginx开发一个简单的HTTP过滤模块
- Nginx开发一个简单的HTTP过滤模块
- nginx 开发简单的http模块
- 深入理解nginx chap3 开发一个简单的HTTP模块
- Nginx模块开发(5)————开发简单的HTTP过滤模块
- Nginx模块开发之最简单的Hello模块
- NGINX模块开发入门——(最简单、最实用、最细腻)
- 对nginx和apache模块开发的一点心得体会
- C++开发人员的字符串的定义方式
- Nginx Http模块开发
- iPhone开发之创建简单界面视图的三种方式之一 使用xcode4自动生成界面
- Nginx模块开发指南中文版
- Nginx模块开发 从url变量中key的值 来确定upstream服务器