日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nginx的模块开发

發布時間:2024/2/28 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nginx的模块开发 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

nginx剛剛在國內開始流行的時候, 我就把它引入公司技術體系,用來替代apache主要做動靜分離。

nginx的并發處理能力和穩定性,以及優秀的軟件架構深深得吸引了我, 讓我跨入了高性能服務器開發的大門。

正巧當時要基于flash技術開發一套行情系統, 而且要支持 代理環境, 而當時并沒有什么好的辦法讓flash通過socket并穿過代理訪問行情服務器,

后來只能采用http技術去訪問行情服務器。為了開發一個健 壯的,高并發的行情服務器,在技術選型時想到 了nginx的模塊化機制,最終基于nginx開發了第一版行情系統。

本文主要簡單舉例如何開發一個nginx模塊, 讓我們從hello world開始吧。

模塊代碼ngx_http_cssweb_module.c


#include <stdio.h> #include <stdlib.h>#include <ngx_config.h> #include <ngx_core.h> #include <ngx_http.h>static char *ngx_http_cssweb_set(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); static ngx_int_t ngx_http_cssweb_init_master(ngx_log_t *log); static ngx_int_t ngx_http_cssweb_init_module(ngx_cycle_t *cycle); static ngx_int_t ngx_http_cssweb_init_process(ngx_cycle_t *cycle); static ngx_int_t ngx_http_cssweb_init_thread(ngx_cycle_t *cycle); static void ngx_http_cssweb_exit_thread(ngx_cycle_t *cycle); static void ngx_http_cssweb_exit_process(ngx_cycle_t *cycle); static void ngx_http_cssweb_exit_master(ngx_cycle_t *cycle);static ngx_int_t ngx_http_cssweb_handler(ngx_http_request_t *r);// 配置文件參數 static ngx_command_t ngx_http_cssweb_commands[] = {{ ngx_string("ngx_cssweb_module"),NGX_HTTP_LOC_CONF|NGX_CONF_NOARGS,ngx_http_cssweb_set,NGX_HTTP_LOC_CONF_OFFSET,0,NULL },ngx_null_command };static ngx_http_module_t ngx_http_cssweb_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_cssweb_module = {NGX_MODULE_V1,&ngx_http_cssweb_module_ctx, /* module context */ngx_http_cssweb_commands, /* module directives */NGX_HTTP_MODULE, /* module type */ngx_http_cssweb_init_master, /* init master */ngx_http_cssweb_init_module, /* init module */ngx_http_cssweb_init_process, /* init process */ngx_http_cssweb_init_thread, /* init thread */ngx_http_cssweb_exit_thread, /* exit thread */ngx_http_cssweb_exit_process, /* exit process */ngx_http_cssweb_exit_master, /* exit master */NGX_MODULE_V1_PADDING };// 讀取配置項 static char * ngx_http_cssweb_set(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) {ngx_http_core_loc_conf_t *clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);/* register hanlder */clcf->handler = ngx_http_cssweb_handler;return NGX_CONF_OK; }static ngx_int_t ngx_http_cssweb_init_master(ngx_log_t *log) {fprintf(stderr, "\n ngx_http_cssweb_init_master \n");return NGX_OK; }static ngx_int_t ngx_http_cssweb_init_module(ngx_cycle_t *cycle) {fprintf(stderr, "\n ngx_http_cssweb_init_module \n");return NGX_OK; }static ngx_int_t ngx_http_cssweb_init_process(ngx_cycle_t *cycle) {fprintf(stderr, "\n ngx_http_cssweb_init_process \n");return NGX_OK; }static ngx_int_t ngx_http_cssweb_init_thread(ngx_cycle_t *cycle) {fprintf(stderr, "\n ngx_http_cssweb_init_thread \n");return NGX_OK; }static void ngx_http_cssweb_exit_thread(ngx_cycle_t *cycle) {fprintf(stderr, "\n ngx_http_cssweb_exit_thread \n");return; }static void ngx_http_cssweb_exit_process(ngx_cycle_t *cycle) {fprintf(stderr, "\n ngx_http_cssweb_exit_process \n");return; }static void ngx_http_cssweb_exit_master(ngx_cycle_t *cycle) {fprintf(stderr, "\n ngx_http_cssweb_exit_master \n");return; }static ngx_int_t ngx_http_cssweb_handler(ngx_http_request_t *r) {ngx_int_t rc;ngx_buf_t *b;ngx_chain_t out;//只處理GET和HEAD請求if (!(r->method & (NGX_HTTP_GET | NGX_HTTP_HEAD))) {return NGX_HTTP_NOT_ALLOWED;}//丟失請求包內容 rc = ngx_http_discard_request_body(r);if (rc != NGX_OK) {return rc;}//構造響應內容 ngx_str_t response = ngx_string("hello the world");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;out.buf = b;out.next = NULL;//構造響應頭ngx_str_t type = ngx_string("text/plain");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;}//發送響應內容 return ngx_http_output_filter(r, &out); }
編譯配置文件config

ngx_addon_name=ngx_http_cssweb_module


HTTP_MODULES="$HTTP_MODULES ngx_http_cssweb_module"


NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_cssweb_module.c"

ngx_http_cssweb_module.c和config文件位于/usr/local/src/nginx_module目錄下面。


編譯自定義模塊

./configure --prefix=/usr/local/nginx-1.10.3 --add-module=/usr/local/src/nginx_module

make

sudo make install


編輯配置文件nginx.conf, 加入/cssweb的定義

location / {
? ? ? ? ? ? root ? html;
? ? ? ? ? ? index ?index.html index.htm;
? ? ? ? }


? ? ? ? location /cssweb {
? ? ? ? ? ? ?ngx_cssweb_module;
? ? ? ? }

運行服務器

sudo ./nginx


結果如下




總結

以上是生活随笔為你收集整理的nginx的模块开发的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美视频亚洲视频 | 色欲国产精品一区二区 | 九九热这里只有 | 夜夜撸| 秋霞欧美一区二区三区视频免费 | 久久综合激情网 | 久久入 | 视频一区在线播放 | 欧美三级久久久 | 国产热热| 成人免费福利视频 | 日韩阿v| 日韩av网站大全 | 久久精品国产亚洲7777 | 秋霞网一区二区三区 | 久久国产精品毛片 | 日本在线不卡一区二区三区 | 一本色道久久hezyo加勒比 | 欧洲成人午夜精品无码区久久 | 日韩一区二区视频在线播放 | 成人免费视频网站在线看 | 国产一区二区三区日韩 | 奇米影视四色在线 | 精品国产乱码久久久久久蜜臀 | 麻豆做爰免费观看 | 麻豆91视频 | 国产日韩精品一区二区三区 | 波多在线观看 | 国产午夜精品无码一区二区 | 久久精品超碰 | 男人在线视频 | 色屁屁| 久久福利在线 | 精品国产九九 | 解开人妻的裙子猛烈进入 | 刘亦菲久久免费一区二区 | 玖玖玖精品| 91精品观看 | 一区中文字幕 | 欧美日韩高清一区二区 | 日本少妇喂奶漫画 | 成人午夜sm精品久久久久久久 | 国产区精品在线观看 | 手机在线观看av | 国产片网站 | 国内精品一区二区 | 亚洲精品乱码久久久久久日本蜜臀 | 成年人午夜影院 | 三上悠亚ed2k | 日本大胆裸体做爰视频 | 精品午夜一区二区三区 | 午夜网址 | 日韩三级视频在线观看 | 国产精品午夜福利视频234区 | 亚洲一区免费视频 | 涩涩在线观看 | 亚洲精品人妻无码 | 欧美嫩交 | 日韩人妻无码精品久久免费 | 久久在线免费观看视频 | 欧美图片自拍偷拍 | 国产suv精品一区二区 | 一呦二呦三呦精品网站 | 妺妺窝人体色www在线下载 | 狠狠操一区 | 男人天堂影院 | 久久理论片 | 高清中文字幕 | 欧美日韩在线视频免费播放 | 免费毛片一区二区三区 | 嫩草视频在线免费观看 | 欧美理伦少妇2做爰 | a在线天堂| 99国产精品99久久久久久 | av网站大全在线 | 五月天婷婷社区 | 狠狠做深爱婷婷综合一区 | 岛国av网站| 69精品久久 | 爱情岛亚洲论坛入口福利 | 秋葵视频在线 | 婷婷在线视频观看 | fc2成人免费视频 | 国产67194| 污免费在线观看 | 亚洲精品国产日韩 | 国产在线精品一区二区三区 | 中文字幕视频网 | 国产女合集| 欧美全黄 | 国产性―交―乱―色―情人 | 国产视频一区在线播放 | 精品国产一区二区三区四区阿崩 | 青青草国产在线视频 | 肉丝袜脚交视频一区二区 | 天天操狠狠干 | 欧美放荡办公室videos4k | 成人免费网站黄 | 日本成人片在线 |