Nginx模組開發之hello world

2021-07-25 05:18:59 字數 3128 閱讀 7156

此文的目的:只是為了讓**飛起來,不涉及原理

測試的nginx版本: nginx-1.10.2

先上nginx配置

我們要實現的模組就是"mytest",請求到來時,交由此模組處理。

步驟一:

並需要在此目錄中建立兩個檔案configngx_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通...