引言:最近實習由於項目需要,為了追求穩定性加上烤魚利用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的