• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            concentrate on c/c++ related technology

            plan,refactor,daily-build, self-discipline,

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              37 Posts :: 1 Stories :: 12 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(9)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

             

            Nginx開發第三方模塊實例

            Ø 序言

            Nginx是一個極具擴展性的服務器,這顯著體現在對第三方模塊的支持,開發者能夠將自己開發的模塊,按照nginx既有的規則,完美地融合進http框架中,以實現開發者定制功能的作用。

            這篇文章主要用于結合如何開發一個簡單的第三方模塊,目標人群為想了解nginx開發第三方模塊的同學,文章內容主要包括三個部分,如何將HTTP模塊嵌入nginx和如何開發第三方模塊以及一個例子。

            Ø 如何將HTTP模塊嵌入nginx

            Nginx目前來說提供了二種方式,config文件+configure 腳本,手動方式,后面手動方式是更加復雜的,且容易出錯,在常規的nginx開發中,基本上都是用config文件+configure腳本方式比較多。接下來分別介紹這兩種方式。

             

            1)      Config文件+configure腳本

            Config文件

            這個是指提供config文件,并且在文件里面給出三個配置項,就可以達到效果。這三個配置項是指:

            A.      Ngx_addon_name就是自己要開發的這個模塊名字。

            B.        Nginx模塊名:這有點像設置環境變量啥的,首先要知道自己開發啥模塊,nginx對應的模塊有,$HTTP_MODULES(常規的http模塊), $HTTP_FILTER_MODULES(HTTP過濾模塊)$HTTP_HEAD_FILTER_MODULES(HTTP 頭部過濾模塊) $CORE_MODULES(nginx的核心模塊)$EVENT_MODULES(nginx的事件模塊)等,然后在后面添加你所要添加的模塊名字,以空格隔開,比如這次我們開發添加的模塊:

            HTTP_MODULES = “$HTTP_MODULES ngx_http_helloworld_module”

            C.        NGX_ADDON_SRCS這個顧名思義,就是指定新添加文件的路徑,不過這個都是相對路徑,因為在configure的時候就指定了上層路徑,比如--add-modules=PATH

            比如我們這次開發要添加的源文件:

            NGX_ADDON_SRCS = “$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_helloworld_module.c”

            Configure腳本

            這里需要用- -add-module=PATH將第三方模塊的路徑加入,

            比如configure - -add-module=~/ngx_3rd_modules/

            那我們能分析下這背后做了什么呢?我們從下面兩個部分來展開說明

            a)      Auto/modules

            這個主要是說明將定制的第三方模塊添加到生成的ngx_modules.c里面。

            a)         指定模塊下面的配置文件.

            b)         生成模塊信息

            一、生成模塊數組

            根據需要開啟的模塊加載對應的模塊,下面是開啟http模塊后的所需要的模塊
             

            二、生成ngx_modules.c文件

             

            b)      Auto/make

            顯而易見,這個就是負責編譯相關的模塊。

            1)         生成第三方源碼

            2)         生成鏈接代碼,并將目標文件,庫文件鏈接成二進制程序


            2)      手動方式

            分兩步來做,第一,修改obj/ngx_modules.c, 在里面增加對應的第三方模塊,第二,修改obj/Makefile,在里面增加第三方模塊的編譯,這種直接修改的方法不太可取,易出錯,一般都是用上面的第二種方法。

            Ø 開發第三方模塊注意事項

            首先,要確定針對那個模塊進行開發,nginx的模塊是有順序性的,比如: HTTP_MODULES = “$HTTP_MODULES ngx_http_helloworld_module”

            其次,因為nginx是異步非阻塞的,在編制代碼時,一定要注意不能阻塞nginx進程.

            Ø 示例

            見附件/Files/jolleydtan/test.zip

             

             參考:

            深入理解nginx. 

            posted on 2016-05-10 08:25 jolley 閱讀(1869) 評論(2)  編輯 收藏 引用 所屬分類: nginx

            Feedback

            # re: nginx開發第一個helloworld. 2016-05-19 15:16 dzct
            有什么意義?什么使用場景與用途?  回復  更多評論
              

            # re: nginx開發第一個helloworld. 2016-05-20 08:12 jolley
            @dzct
            首先,你要明白nginx用來做啥的?以及為啥要用nginx而不是apache? 這個具體原因你自個兒問度娘或者谷哥好了。
            其次,使用場景的話,舉個例子,在游戲上面,nginx因為支持tcp負載均衡,所以會比用來做前置服務器,nginx負載策略有很多種(http://nginx.org/en/docs/http/load_balancing.html),
            如果你想擴展基于nginx負載均衡的策略,那么你可能就要定制HTTP_MODULES模塊作為第三方模塊融入到http框架里面,并且在nginx.conf里面進行擴展使用。  回復  更多評論
              

            国产精品九九九久久九九| 国内精品久久久久影院亚洲| 国产69精品久久久久APP下载| 久久久99精品一区二区| 久久久艹| 国产三级观看久久| 久久婷婷五月综合色99啪ak| 亚洲国产高清精品线久久| 日本人妻丰满熟妇久久久久久| 99久久伊人精品综合观看| 亚洲国产香蕉人人爽成AV片久久 | 99久久婷婷国产综合精品草原| 久久久久亚洲精品中文字幕| 亚洲国产精品无码久久| 久久国产热这里只有精品| 综合久久国产九一剧情麻豆| 国产成人久久精品麻豆一区| 亚洲精品乱码久久久久久按摩 | 久久久噜噜噜久久中文字幕色伊伊 | 久久无码国产| 亚洲欧美精品伊人久久| 亚洲午夜久久久影院伊人| 国产亚洲美女精品久久久| 精品久久久久久久无码| 香蕉久久夜色精品国产2020| 好久久免费视频高清| 武侠古典久久婷婷狼人伊人| 精品熟女少妇av免费久久| 久久亚洲国产最新网站| 久久不见久久见免费影院www日本| 国内精品久久久久影院一蜜桃| 狠狠综合久久AV一区二区三区| 香蕉久久夜色精品国产尤物| 人人狠狠综合久久亚洲高清| 99久久精品免费看国产一区二区三区| 色偷偷88888欧美精品久久久| 97久久婷婷五月综合色d啪蜜芽| 久久91精品国产91| 欧美黑人激情性久久| 国产成人久久精品一区二区三区| 久久综合偷偷噜噜噜色|