此文的目的:只是為了讓**飛起來,不涉及原理
測試的nginx版本: nginx-1.10.2
先上nginx配置:
我們要實現的模組就是"mytest",請求到來時,交由此模組處理。
步驟一:
並需要在此目錄中建立兩個檔案config和ngx_http_mytest_module.c,如下圖
步驟二:
編輯config檔案,內容如下
步驟三:編輯ngx_http_mytest_module.c檔案,**如下
#include #include #include //宣告mytest模組的配置處理方法
//定義mytest模組配置處理
//ngx_null_command是乙個空的ngx_command巨集
ngx_null_command
};//定義mytest模組
//請求處理方法
//丟棄請求中的包體
//設定返回的返回的content-type
ngx_str_t type = ngx_string("text/plain");
//返回的包體內容
ngx_str_t response = ngx_string("hello world!\n");
//設定返回狀態碼
//設定content-length的長度
r->headers_out.content_length_n = response.len;
//設定content-type
r->headers_out.content_type = type;
//傳送http頭
//構造ngx_buf_t結構體準備傳送包體
ngx_buf_t* b;
b = ngx_create_temp_buf(r->pool, response.len);
if (b == null)
//將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方法結束請求*/
}//定義mytest模組的配置處理方法
步驟四:編譯nginx,指定安裝目錄和增加的模組,如果全程沒報錯,意味著編譯成功
步驟五:測試配置,並執行,通過curl測試模組的可用性,curl -i "127.0.0.1/"也可以通過瀏覽器訪問。
如下圖
最後:此文沒有講解原理,沒有講模組是怎麼新增進去的,也沒有講模組是怎麼執行的,只是為了跑起來。
推薦文章:
原文出自:
end;
linux 載入hello模組
1 hello 1.c hello 1.c the st kernel module.include needed by all modules include needed for kern alert int init module void void cleanup module void 2...
Linux 2 6核心驅動之hello模組
終於開始在鍾愛的linux上學習寫驅動程式了。本來以為寫乙個hello模組是異常簡單的事情,結果折騰了幾天才編譯通過。首先為了測試安裝了虛擬機器 核心程式是很危險滴,我可不想讓自己的愛本頻繁崩潰 裝fedora17 fedora18的live版在虛擬機器上始終跑不起來 來回來去幾次也裝不上virtu...
nginx的模組開發
nginx剛剛在國內開始流行的時候,我就把它引入公司技術體系,用來替代apache主要做動靜分離。nginx的併發處理能力和穩定性,以及優秀的軟體架構深深得吸引了我,讓我跨入了高效能伺服器開發的大門。正巧當時要基於flash技術開發一套 系統,而且要支援 環境,而當時並沒有什麼好的辦法讓flash通...