<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    Nginx學習筆記六Nginx的模塊開發

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    1.Nginx配置文件主要組成:
    main(全局配置)這部分的指令將影響其他所有部分.
    server(虛擬主機配置)這部分指令主要用于指定虛擬主機域名,IP和端口.
    upstream(主要為反向代理,負載均衡相關配置)這部分指令用于設置反向代理及后端服務

    器的負載均衡.
    location(目錄匹配配置)這部分指令用于匹配網頁位置(例如,根目錄"/","/images",等

    等).

    location部分會繼承server部分的指令,而server部分會繼承main部分的指令.upstream

    既不會繼承指令也不會影響其他部分.它有自己的特殊指令,不需要在其他地方應用.

    2.Nginx模塊概述.
    Nginx的模塊不能夠像Apache那樣動態添加,所有的模塊都要預先編譯進Nginx的二進制可

    執行文件中.Nginx模塊有三種角色.
    (1)Handlers(處理模塊)——用于處理HTTP請求并輸出內容.
    (2)Filters(過濾模塊)——用于過濾Handler輸出的內容.
    (3)Load-balancers(負載均衡模塊)——當有多于一臺的后端服務器供選擇時,選擇一臺

    后端服務器并將HTTP請求轉發到該服務器.

    3.Nginx模塊的處理流程:
    Nginx發送文件或請求到其他服務器時,可以用Handlers處理模塊為其服務:當需要Nginx

    把輸出壓縮或在服務端加一些東西時,可以用Filters過濾模塊.Nginx的核心模塊主要管

    理網絡層和應用層協議,以及啟動針對特定應用的一系列候選模塊.

    客戶端發送HTTP請求到Nginx服務器
            |
    Nginx基于配置文件中的位置選擇一個合適的處理模塊        
            |
    負載均衡模塊選擇一臺后端服務器(反向代理情況下)
            |
    處理模塊進行處理并把輸出緩沖放到第一個過濾模塊上
            |
    第一個過濾模塊處理后輸出給第二個過濾模塊
            |
    然后第二個過濾模塊又到了第三個過濾模塊
            |
        第N個過濾模塊
            |
    最后把處理結果發送給客戶端

    4.模塊執行的位置
    模塊相當于鉤子,可以掛在Nginx的以下位置,在某些時候執行某些功能.
    (1)當服務讀配置文件之前.
    (2)當讀取在location和server部分或其他任何部分的每一個配置指令時。
    (3)當Nginx初始化全局部分的配置時.
    (4)當Nginx初始化主機部分(比如主機/端口)的配置時.
    (5)當Nginx將全局部分的配置與主機部分的配置合并時.
    (6)當Nginx初始化匹配位置部分配置時.
    (7)當Nginx將其上層主機配置與位置部分配置合并時.
    (8)當Nginx的主進程(master)開始時.
    (9)當一個新的工作進程(worker)開始時.
    (10)當一個工作進程退出時.
    (11)當主進程退出時.
    (12)處理HTTP請求時.
    (13)過濾HTTP回復的頭部時.
    (14)過濾HTTP回復的主體時.
    (15)選擇一臺后端服務器時.
    (16)初始化到后端服務器的請求時.
    (17)重新初始化到后端服務器的請求時.
    (18)處理來自后端服務器的回復時.
    (19)完成與后端服務器的交互時.

    5.Nginx模塊編寫例子
    (1)執行以下命令創建一個目錄,將在該目錄內編寫我們的Nginx模塊:
    mkdir -p /opt/nginx_hello_world
    cd /opt/nginx_hello_world
    (2)開始創建Nginx模塊所需的配置文件(名稱為config)
    vi /opt/nginx_hello_world/config
    輸入以下內容并保存退出.
    ngx_addon_name=ngx_http_hello_world_module
    HTTP_MODULES="$HTTP_MODULES ngx_http_hello_world_module"
    NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_hello_world_module.c"
    CORE_LIBS="$CORE_LIBS -lpcre"
    (3)創建Nginx模塊的c程序文件(名稱格式為"ngx_http_模塊名稱_module.c",在本實例中

    ,文件名稱為ngx_http_hello_world_module.c)
    vi /opt/nginx_hello_world/ngx_http_hello_world_module.c
    (4)下載Nginx源碼包,并將hello world模塊編譯到其中.如下所示
    wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.9.tar.gz
    tar zxvf pcre-7.9.tar.gz
    cd pcre-7.9/
    ./configure
    make && make install
    cd ../

    wget http://sysoev.ru/nginx/nginx-0.8.14.tar.gz
    tar zxvf nginx-0.8.14.tar.gz
    cd nginx-0.8.14/
    ./configure --prefix=/usr/local/nginx --add-module=/opt/nginx_hello_world
    make
    make install
    (5)配置nginx.conf,在server部分增加以下內容:
    location = /hello {
      hello_world ;
    }
    (6)啟動Nginx,用瀏覽器訪問http://localhost/hello,就可以看到編寫的Nginx Hello

    World 模塊輸出的文字"Hello World"


    6.Hello World模塊分析:
    在ngx_http_hello_world_module.c代碼中,ngx_command_t函數用于定義包含模塊指令的

    靜態數組ngx_http_hello_world_commands,代碼如下
    static ngx_command_t ngx_http_hello_world_commands[] =
    {
     {
      ngx_string ("hello_world"),
      NGX_HTTP_LOC_CONF|NGX_CONF_NOARGS,
      ngx_http_hello_world,
      0,
      0,
      NULL
     },
     ngx_null_command
    }

    (1)在數組中,第一項參數ngx_string("hello_world")為指令名稱字符串,不能含有空格,

    數據類型是ngx_str_t,經常用來進行字符串實例化.ngx_str_t結構體由包含有字符串的

    data成員和表示字符串長度的len成員組成.Nginx用這個數據類型來存放字符串.
    (2)第二項參數用來設置指令在配置文件位置的哪一部分使用是合法的.可選值如下,多個

    選項以"|"隔開:
    NGX_HTTP_MAIN_CONF——指令出現在全局配置部分是合法的.
    NGX_HTTP_SRV_CONF——指令出現在server主機配置部分是合法的.
    NGX_HTTP_LOC_CONF——指令出現在location配置部分是合法的.
    NGX_HTTP_UPS_CONF——指令出現在upstream配置部分是合法的.
    (3)第三項參數ngx_http_hello_world是一個回調函數.
    (4)第四項參數用于告訴Nginx是把要保持的值放在全局配置部分,server主機配置部分還

    是location位置配置部分(使用NGX_HTTP_MAIN_CONF_OFFSET,

    NGX_HTTP_SRV_CONF_OFFSET,NGX_HTTP_LOC_CONF_OFFSET)
    (5)第五項參數用于設置指令的值保存在結構體的哪個位置
    (6)第六項參數一般為NULL。
    六個參數都設置完畢后,數組在讀入ngx_null_command后停止.

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全