Nginx原理及模塊開發初步
#插件化與模塊化
插件與模塊化實例:
正如緩存是速度的秘密,插件與模塊化一直是項目成長的引擎
功能強大的秘密
? 實體中的可換頭螺絲刀
? USB接口
? 函數 ?類
? PHP 模塊
? Eclipse 插件
? Nginx 模塊
##插件與模塊化好處:
1. 模塊化使得分工更加清晰,而插件化使得功能的無限擴展成 為可能,而且不影響主體工程
2. 如果說 PHP 模塊開發更多是為了效率,而Web服務器的模塊 開發,更多是為了功能擴展
#Apache 模塊開發
###概念
1. apache模塊擴展方式
靜態編譯--with-ssl
動態模塊.so
2. 動態模塊DSO
Dynamic SharedObjects(動態共享目標)
3. apache的apxs(Apache eXtenSion)
與php的--with-apxs2、phpize
###條件
1. 從源碼安裝 Apache
2. 安裝 apr (Apache Portable Runtime)庫和 apr-util 庫
3. /usr/local/apache2/bin/apxs(APache eXtenSion), 編譯和安 裝擴展模塊,用于編譯一個或多個源程序或目標代碼文件為動態 共享對象,使之可以用由 mod_so 提供的LoadModule 指令在 運行時加載到 Apache 服務器中
###模塊開發
1. 進入 httpd-2.4.12/modules/
2. /usr/local/apache2/bin/apxs –g –n ucai
3. 配置調整

4. http://101.251.196.91:8080/ucai
###模塊接口

模塊接口
1. ucai_register_hooks 在啟動時調用,相當于 PHP模塊中的
MINIT 函數
2. 可以注冊多個 Hook 函數,在不同階段調用
3. 返回值 OK 結束,DECLINED 表示繼續進入下面的階段
4. 詳細可調用接口 apache-example.c
#Nginx 模塊開發


##Nginx配置是靈魂,core模塊簡單高效
main(全局設置)
events(事件配置) upstream(上游服務器設置) http(通用請求處理) server(主機設置) location(URL匹配特定位置后的設置)



? Nginx模塊文件組成
config 描述名稱和源文件位置,還可以指定依賴庫 c 源文件,可以有多個,config里描述
? Nginx模塊加載過程
./configure --add-module=.... 讀取config生成Makefile c文件遵循nginx插件規范接口
nginx解析conf文件,core模塊分配location到模塊指定接口處理
? ningx -V 查詢編譯參數
Nginx模塊組成
1. 模塊定義,總流程 ngx_module_t (必須)
2. 模塊上下文,Hook注入點ngx_http_module_t(http模塊)
3. 模塊指令ngx_command_t(loc模塊)
4. 參數存儲Struct命名ngx_http_[module-name]_[main|srv|loc]_conf_t
5. 模塊按類型特有流程裝載,例如Handler
a)獲取配置 ngx_http_get_module_loc_conf(loc模塊)
b)生成響應,設置ngx_http_request_t
c)發送響應頭 ngx_http_send_header
d)發送響應體 ngx_http_output_filter
##Nginx模塊示例
1. headinfo
main模塊,最少代碼
增加頭部信息輸出
2. ucai_echo
location模塊
匹配location輸出配置參數
3. ucai_auth
main模塊 讀取cookie,匹配redis用戶,輸出驗證信息
yum install redis hiredis hiredis-devel
4. stub_status 自帶location模塊 內部統計信息
##Nginx模塊分類
objs/ngx_modules.c 全局core模塊 event模塊
正則模塊
http模塊
http handler模塊 第三方handler模塊 http filter模塊 第三方filter模塊
#LNMP核心模塊擴展總結
1、apache、nginx
apxs LoadModule、--add-module
2、php module
extension=memcache.so
3、Mysql插件
install plugin
每一層都可以擴展 形成了強大的LNMP組合
- SWOOLE及php網絡編程
- LNMP架構與Socket,http協議
- 如何高效學習
- 開發工具箱
- 編寫高效的js
- js閉包編寫全功能的購物車
- JSON和JSONP
- 多級分類的開發與應用
- 設計安全的登錄注冊流程
- 前端性能優化
- 前端架構優化
- 使用第三方云服務加速產品開發
- 移動互聯網之API開發
- php分層
- 全文檢索的實踐與部署
- webIM的原理及前后端實現
- 如何配置高效的數據庫以及MySQL的代碼及插件開發
- NoSql.隊列,任務隊列
- 構建本機緩存,構建分布式緩存池
- 數據庫分庫分表的設計
- Nginx原理及模塊開發初步
- 無限擴充的數據庫架構
- php構建分庫分表分布式數據庫連接池
- 靜態文件上傳、分布式存儲與分發
- MySQL Cluster,Proxy分析與實踐
- 架構解密