真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

開(kāi)發(fā)一個(gè)簡(jiǎn)單的http模板之序章-創(chuàng)新互聯(lián)

流程 1.當(dāng)通過(guò)開(kāi)發(fā) HTTP 模塊來(lái)實(shí)現(xiàn)產(chǎn)品功能時(shí),是可以完全享用 Nginx 的優(yōu)秀設(shè)計(jì)所帶來(lái)的、 與官方模塊相同的高并發(fā)特性的。不過(guò),如何開(kāi)發(fā)一個(gè)充滿異步調(diào)用、無(wú)阻塞的 HTTP 模塊 呢 2.?需要把程序嵌入到Nginx中,也就是說(shuō),最終編譯出的二進(jìn)制程序Nginx要包含我 們的代碼 3.個(gè)全新的HTTP 模塊要能介入到 HTTP 請(qǐng)求的處理流程中 4.我們的模塊才能開(kāi)始處理 HTTP 請(qǐng)求,但在開(kāi)始處理請(qǐng)求前還需要先了解一些Nginx 框架定義的數(shù)據(jù)結(jié)構(gòu) 5.正式處理請(qǐng)求時(shí),還要可以獲得 Nginx 框架接收、解析后的用戶(hù)請(qǐng)求信息 6.業(yè)務(wù)執(zhí)行完畢后,則要考慮發(fā)送響應(yīng)給用戶(hù) 7包括將磁盤(pán)中的文 件以HTTP 包體的形式發(fā)送給用戶(hù) 調(diào)用模板 首先需要了解典型的 HTTP 模塊是如何介入 Nginx 處理用戶(hù)請(qǐng)求流 程的。下圖是一個(gè)簡(jiǎn)化的時(shí)序圖,這里省略了許多異步調(diào)用,忽略了多個(gè)不同的 HTTP 處理階段,僅標(biāo)識(shí)了在一個(gè)典型請(qǐng)求的處理過(guò)程中主要模塊被調(diào)用的流程,以此幫助讀者理解 HTTP模塊如何處理用戶(hù)請(qǐng)求。

10年積累的網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶(hù)對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶(hù)得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有鶴山免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。 worker進(jìn)程會(huì)在一個(gè)for 循環(huán)語(yǔ)句里反復(fù)調(diào)用事件模塊檢測(cè)網(wǎng)絡(luò)事件。 事件模塊檢測(cè)到某個(gè)客戶(hù)端發(fā)起的TCP 請(qǐng)求時(shí)(接收到 SYN 包),將會(huì)為它建立 TCP 連 接, 成功建立連接后根據(jù)nginx.conf文件中的配置會(huì)交由HTTP框架處理HTTP框架會(huì)試圖接收完整的HTTP頭部,并在接收到完整的HTTP頭部后將請(qǐng)求分發(fā)到具體的HTTP模塊中處理 處理策略: 其中最常見(jiàn)的是根據(jù)請(qǐng)求的URI 和 nginx.conf 里 location 配置項(xiàng) 的匹配度來(lái)決定如何分發(fā) HTTP 模塊在處理請(qǐng)求的結(jié)束時(shí),大多會(huì)向客戶(hù)端發(fā)送響應(yīng),此時(shí)會(huì)自動(dòng)地依次調(diào) 用所有的 HTTP 過(guò)濾模塊,每個(gè)過(guò)濾模塊可以根據(jù)配置文件決定自己的行為 準(zhǔn)備工作

Nginx模塊需要使用C(或者C++)語(yǔ)言編寫(xiě)代碼來(lái)實(shí)現(xiàn),每個(gè)模塊都要有自己的名字。 按照Nginx約定俗成的命名規(guī)則,我們把第一個(gè)HTTP模塊命名為ngx_http_mytest_module。由 于第一個(gè)模塊非常簡(jiǎn)單,一個(gè)C源文件就可以完成

為了做到跨平臺(tái),Nginx定義、封裝了一些基本的數(shù)據(jù)結(jié)構(gòu)。由于Nginx對(duì)內(nèi)存分配比較“吝嗇”(只有保證低內(nèi)存消耗,才可能實(shí)現(xiàn)十萬(wàn)甚至百萬(wàn)級(jí)別的同時(shí)并發(fā)連接數(shù)),所以 這些Nginx數(shù)據(jù)結(jié)構(gòu)天生都是盡可能少占用內(nèi)存。(看我nginx源碼解析即可)

如何將自己的HTTP模塊編譯進(jìn)Nginx 方法一 config文件? Nginx 提供了一種簡(jiǎn)單的方式將第三方的模塊編譯到 Nginx 中。首先把源代碼文件全部放 到一個(gè)目錄下,同時(shí)在該目錄中編寫(xiě)一個(gè)文件用于通知 Nginx 如何編譯本模塊,這個(gè)文件名 必須為 config config寫(xiě)法

config文件其實(shí)是一個(gè)可執(zhí)行的Shell腳本。如果只想開(kāi)發(fā)一個(gè)HTTP模塊,那么config文 件中需要定義以下3個(gè)變量

·ngx_addon_name:僅在configure執(zhí)行時(shí)使用,一般設(shè)置為模塊名稱(chēng)。 ·HTTP_MODULES:保存所有的HTTP模塊名稱(chēng),每個(gè)HTTP模塊間由空格符相連。在 重新設(shè)置HTTP_MODULES變量時(shí),不要直接覆蓋它,因?yàn)閏onfigure調(diào)用到自定義的config腳 本前,已經(jīng)將各個(gè)HTTP模塊設(shè)置到HTTP_MODULES變量中了,因此,要像如下這樣設(shè) 置
"$HTTP_MODULES ngx_http_mytest_module"
? NGX_ADDON_SRCS:用于指定新增模塊的源代碼,多個(gè)待編譯的源代碼間以空格 符相連。注意,在設(shè)置NGX_ADDON_SRCS時(shí)可以使用$ngx_addon_dir變量,它等價(jià)于 configure執(zhí)行時(shí)--add-module=PATH的PATH參數(shù) 總的文件
ngx_addon_name=ngx_http_mytest_module
HTTP_MODULES="$HTTP_MODULES ngx_http_mytest_module"
NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_mytest_
下面完整地解釋一下configure上文提到的config文件配合起來(lái)把定制的 第三方模塊加入到Nginx中的:
configure --add-module=PATh(config文件)
"ngx_http_uwsgi_module",
    "ngx_http_scgi_module",
    "ngx_http_memcached_module",
    "ngx_http_empty_gif_module",
    "ngx_http_browser_module",
    "ngx_http_upstream_hash_module",
    "ngx_http_upstream_ip_hash_module",
    "ngx_http_upstream_least_conn_module",
    "ngx_http_upstream_keepalive_module",
    "ngx_http_upstream_zone_module",
    "ngx_http_mytest_mudule",//我們自己的
    "ngx_http_write_filter_module",
    "ngx_http_header_filter_module",
    "ngx_http_chunked_filter_module",
    "ngx_http_range_header_filter_module",
    "ngx_http_gzip_filter_module",
    "ngx_http_postpone_filter_module",
    "ngx_http_ssi_filter_module",
    "ngx_http_charset_filter_module",
    "ngx_http_userid_filter_module",
    "ngx_http_headers_filter_module",
    "ngx_http_copy_filter_module",
    "ngx_http_range_body_filter_module",
    "ngx_http_not_modified_filter_module",

在執(zhí)行configure--add-module=PATH命令時(shí),PATH就是第三方模塊所在的路徑。在configure中,通過(guò)auto/options腳本設(shè)置了NGX_ADDONS變量

方法二 修改makefile ? 我們有時(shí)可能需要更靈活的方式,比如重新決定ngx_module_t*ngx_modules[] 數(shù)組中各個(gè) 模塊的順序,或者在編譯源代碼時(shí)需要加入一些獨(dú)特的編譯選項(xiàng),那么可以在執(zhí)行完 configure后,對(duì)生成的 objs/ngx_modules.c和objs/Makefile文件直接進(jìn)行修改。 在修改 objs/ngx_modules.c 時(shí),首先要添加新增的第三方模塊的聲明,如下所示:
extern ngx_module_t ngx_http_mytest_module;
其次,在合適的地方將模塊加入到 ngx_modules 數(shù)組中
ngx_module_t *ngx_modules[] = {
…
&ngx_http_upstream_ip_hash_module,
&ngx_http_mytest_module,
&ngx_http_write_filter_module,
…
NULL
};

note:

模塊的順序很重要。如果同時(shí)有兩個(gè)模塊表示對(duì)同一個(gè)請(qǐng)求感興趣,那么只有順 序在前的模塊會(huì)被調(diào)用。 修改 objs/Makefile 時(shí)需要增加編譯源代碼的部分,例如:
objs/addon/httpmodule/ngx_http_mytest_module.o: $(ADDON_DEPS) \
../sample/httpmodule// ngx_http_mytest_module.c
$(CC) -c $(CFLAGS) $(ALL_INCS) \
-o objs/addon/httpmodule/ngx_http_mytest_module.o \
../sample/httpmodule// ngx_http_mytest_module.c
還需要把目標(biāo)文件鏈接到 Nginx 中,例如:
objs/nginx: objs/src/core/nginx.o \
...
objs/addon/httpmodule/ngx_http_mytest_module.o \
objs/ngx_modules.o
$(LINK) -o objs/nginx \
objs/src/core/nginx.o \
...
objs/addon/httpmodule/ngx_http_mytest_module.o \
objs/ngx_modules.o \
-lpthread -lcrypt -lpcre -lcrypto -lcrypto -lz

推薦方法一:因?yàn)檎?qǐng)慎用這種直接修改Makefile和ngx_modules.c的方法,不正確的修改可能導(dǎo)致Nginx工作 不正常。

拓展知識(shí) 關(guān)于利用configure過(guò)程中發(fā)生了什么

結(jié)果:

creating objs/Makefile
auto/make: line 420: syntax error near unexpected token `then'
auto/make: line 420: `        if{$ext="cpp"};then'

Configuration summary
  + using system PCRE library
  + OpenSSL library is not used
  + using system zlib library

  nginx path prefix: "/usr/local/nginx"
  nginx binary file: "/usr/local/nginx/sbin/nginx"
  nginx modules path: "/usr/local/nginx/modules"
  nginx configuration prefix: "/usr/local/nginx/conf"
  nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
  nginx pid file: "/usr/local/nginx/logs/nginx.pid"
  nginx error log file: "/usr/local/nginx/logs/error.log"
  nginx http access log file: "/usr/local/nginx/logs/access.log"
  nginx http client request body temporary files: "client_body_temp"
  nginx http proxy temporary files: "proxy_temp"
  nginx http fastcgi temporary files: "fastcgi_temp"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp"
1 可以參照( ?Nginx源碼解析--configure_編程界的謝菲爾德的博客-博客)添加進(jìn)去
. auto/modules
. auto/make

2.在configure命令執(zhí)行到auto/modules腳本時(shí),將在生成的ngx_modules.c文件中加入定制的

第三方模塊
if test -n "$NGX_ADDONS"; then
echo configuring additional modules
for ngx_addon_dir in $NGX_ADDONS
do
echo "adding module in $ngx_addon_dir"
if test -f $ngx_addon_dir/config; then
#在這里執(zhí)行自定義的
config腳本
. $ngx_addon_dir/config
echo " + $ngx_addon_name was configured"
else
echo "$0: error: no $ngx_addon_dir/config was found"
exit 1
fi
done
fi
可以看到, $NGX_ADDONS 可以包含多個(gè)目錄,對(duì)于每個(gè)目錄,如果其中存在 config 文 件就會(huì)執(zhí)行,也就是說(shuō),在 config 中重新定義的變量都會(huì)生效。之后, auto/modules 腳本開(kāi)始 創(chuàng)建 ngx_modules.c 文件,這個(gè)文件的關(guān)鍵點(diǎn)就是定義了 ngx_module_t*ngx_modules[] 數(shù)組,這 個(gè)數(shù)組存儲(chǔ)了 Nginx 中的所有模塊。 Nginx 在初始化、處理請(qǐng)求時(shí),都會(huì)循環(huán)訪問(wèn) ngx_modules 數(shù)組,確定該用哪一個(gè)模塊來(lái)處理

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧


標(biāo)題名稱(chēng):開(kāi)發(fā)一個(gè)簡(jiǎn)單的http模板之序章-創(chuàng)新互聯(lián)
分享路徑:http://weahome.cn/article/dgdhjj.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部