[開發記錄]Nginx模塊開發(一)


引言:最近實習由於項目需要,為了追求穩定性加上烤魚利用Nginx本身提供的優秀的基礎設施,使用了Nginx提供的一些擴展功能來做Nginx本身的開發。

Nginx提供了很強的可以自己定制擴展功能的“插件式”擴展,在需要加鈎子的地方構造回調函數來完成相應功能(說起來容易做起來難)。

Nginx可以提供三種方式的模塊擴展:

1.Handler方式處理HTTP請求

2.Filter方式對於輸出的HTTP做過濾,可以加解密或其他功能等

3.Load Balancer,作為HTTP方向代理時候的負載均衡所用

由於項目原因,暫時使用的是Handler方式,不過大多數場景下也是使用了Handler方式

Nginx處理HTTP請求的時候,Nginx模塊通過讀取配置文件的參數找到相應的鈎子函數

比如我們的模塊是一個取得日志文件的Nginx模塊,以HTTP POST方式

按照Nginx模塊的命名規則就是  ngx_http_get_log_module

 

比如在Nginx模塊的配置文件  nginx/conf/nginx.conf server 段中增加如下選項

location /get_log {

    get_log on;

}

在模塊編寫完成后在 ./configure 的時候加上--add-module=/yourdir/ngx_http_get_log_module.c 選項

在模塊中與 ngx_http_get_log_module.c 中編寫配置文件config

 

ngx_addon_name=ngx_http_get_log_module

HTTP_MODULES="$HTTP_MODULES ngx_http_get_log_module"

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

在編譯的時候 ./configure --add-module=/yourdir/ngx_http_get_log_module

make &&make install

然后再用HTTP方式測試,client端可以用瀏覽器或者是其他的第三方庫來做

我利用的是python的 urllib2 做HTTP POST的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM