Nginx —— configure文件详解
生活随笔
收集整理的這篇文章主要介紹了
Nginx —— configure文件详解
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
我們曉得configure命令支持非常多的參數(shù),讀者可能會(huì)好奇它在執(zhí)行時(shí)到底做了那些事情,接下來通過解析configure源碼來對(duì)它有一個(gè)感性的認(rèn)識(shí)。
configure由shell腳本編寫,中間會(huì)調(diào)用<nginx-dource>/auto/目錄下的腳本。這里我們只對(duì)configure腳本本身做法納西,對(duì)于它所調(diào)用的auto目錄下的其他工具腳本則只做功能性的說明。
#!/bin/sh# Copyright (C) Igor Sysoev # Copyright (C) Nginx, Inc.LC_ALL=C export LC_ALL#auto/options腳本處理configure命令的參數(shù)。例如,如果參數(shù)時(shí)--help,那么顯示支持所有參數(shù)格式。options腳本會(huì)定義后續(xù)工作將要用到的變量,然后根據(jù)本次參數(shù)及默認(rèn)值設(shè)置這些變量。 . auto/options#auto/init腳本初始化后需將產(chǎn)生的文件路徑。例如:Makefile ngx_modules.c等文件默認(rèn)情況下將會(huì)在<nginx-source>/objes/ . auto/init#auto/sources腳本將分析nginx的源碼結(jié)構(gòu),這樣才能構(gòu)造后續(xù)的Makefile文件 . auto/sources#編譯過程中所有的目標(biāo)文件生成的路徑由-builddir=DIR參數(shù)指定,默認(rèn)情況下為<nginx-source>/objs,此時(shí)這個(gè)目錄將會(huì)被創(chuàng)建 test -d $NGX_OBJS || mkdir -p $NGX_OBJS#開始準(zhǔn)備建立ngx_auth_headers.h 、 autoconf.err等必要的編譯文件 echo > $NGX_AUTO_HEADERS_H echo > $NGX_AUTOCONF_ERR#向objs/ngx_auto_config.h寫入命令行帶的參數(shù) echo "#define NGX_CONFIGURE \"$NGX_CONFIGURE\"" > $NGX_AUTO_CONFIG_H#判斷debug標(biāo)志,若有,那么在objs/ngx_auto_config.h文件中寫入DEBUG宏 if [ $NGX_DEBUG = YES ]; thenhave=NGX_DEBUG . auto/have fi#現(xiàn)在開始檢查操作系統(tǒng)是否支持后續(xù)編譯 if test -z "$NGX_PLATFORM"; thenecho "checking for OS"NGX_SYSTEM=`uname -s 2>/dev/null`NGX_RELEASE=`uname -r 2>/dev/null`NGX_MACHINE=`uname -m 2>/dev/null`#屏幕上輸出OS名稱,內(nèi)核版本,32位/64位內(nèi)核echo " + $NGX_SYSTEM $NGX_RELEASE $NGX_MACHINE"NGX_PLATFORM="$NGX_SYSTEM:$NGX_RELEASE:$NGX_MACHINE";case "$NGX_SYSTEM" inMINGW32_* | MINGW64_* | MSYS_*)NGX_PLATFORM=win32;;esacelseecho "building for $NGX_PLATFORM"NGX_SYSTEM=$NGX_PLATFORM fi#檢查并設(shè)置編譯器,如GCC是否安裝、GCC版本是否支持后續(xù)編譯nginx . auto/cc/conf#對(duì)非windows操作系統(tǒng)定義一些必要的文件,并檢查其是否存在,以此決定configure后續(xù)步驟是否可以成功。 if [ "$NGX_PLATFORM" != win32 ]; then. auto/headers fi#對(duì)于當(dāng)前操作系統(tǒng),定義以下特定的操作系統(tǒng)相關(guān)的方法并檢查當(dāng)前環(huán)境是否支持,例如,對(duì)于linux在使用sched_setaffiniy設(shè)置進(jìn)程優(yōu)先級(jí),使用linux特有的sendfile系統(tǒng)調(diào)用來加速向網(wǎng)絡(luò)中發(fā)送文件塊 . auto/os/confif [ "$NGX_PLATFORM" != win32 ]; then. auto/unix fi#最核心的構(gòu)造運(yùn)行期modules的腳本。它將會(huì)生成ngx_modules.c文件。這個(gè)文件會(huì)被編譯進(jìn)nginx中,其中它所做的唯一的事情就是定義了ngx_modules數(shù)組ngx_modules指明了nginx在運(yùn)行期間有那些模塊會(huì)參與到請(qǐng)求的處理中,包括http請(qǐng)求肯呢個(gè)會(huì)使用那些模塊處理。因此,它對(duì)數(shù)組元素的順序非常敏感,也就是說,絕大部分模塊在ngx_modules數(shù)組中的順序其實(shí)時(shí)固定的。例如,一個(gè)請(qǐng)求必須先執(zhí)行ngx_http_gzip_filter_module模塊重新修改http響應(yīng)中的頭部后,才能使用ngx_http_header_filter模塊按照headers_in結(jié)構(gòu)體里的成員構(gòu)造出以TCP流形式發(fā)送給客戶端的http響應(yīng)頭部。注意,我們?cè)?-add_module=參數(shù)里加入的第三方模塊也在此步驟寫入ngx_modules.c文件中了 . auto/threads . auto/modules#conf腳本用來檢查nginx在鏈接期間需要連接的第三方靜態(tài)庫、動(dòng)態(tài)庫或者目標(biāo)文件是否存在。 . auto/lib/conf#處理nginx安裝后的路徑 case ".$NGX_PREFIX" in.)NGX_PREFIX=${NGX_PREFIX:-/usr/local/nginx}have=NGX_PREFIX value="\"$NGX_PREFIX/\"" . auto/define;;.!)NGX_PREFIX=;;*)have=NGX_PREFIX value="\"$NGX_PREFIX/\"" . auto/define;; esac#處理nginx安裝后conf文件的路徑 if [ ".$NGX_CONF_PREFIX" != "." ]; thenhave=NGX_CONF_PREFIX value="\"$NGX_CONF_PREFIX/\"" . auto/define fi#處理nginx安裝后,二進(jìn)制文件、pid、lock等其他文件的路徑可見configure參數(shù)中路徑類選項(xiàng)的說明 have=NGX_SBIN_PATH value="\"$NGX_SBIN_PATH\"" . auto/define have=NGX_CONF_PATH value="\"$NGX_CONF_PATH\"" . auto/define have=NGX_PID_PATH value="\"$NGX_PID_PATH\"" . auto/define have=NGX_LOCK_PATH value="\"$NGX_LOCK_PATH\"" . auto/define have=NGX_ERROR_LOG_PATH value="\"$NGX_ERROR_LOG_PATH\"" . auto/definehave=NGX_HTTP_LOG_PATH value="\"$NGX_HTTP_LOG_PATH\"" . auto/define have=NGX_HTTP_CLIENT_TEMP_PATH value="\"$NGX_HTTP_CLIENT_TEMP_PATH\"" . auto/define have=NGX_HTTP_PROXY_TEMP_PATH value="\"$NGX_HTTP_PROXY_TEMP_PATH\"" . auto/define have=NGX_HTTP_FASTCGI_TEMP_PATH value="\"$NGX_HTTP_FASTCGI_TEMP_PATH\"" . auto/define have=NGX_HTTP_UWSGI_TEMP_PATH value="\"$NGX_HTTP_UWSGI_TEMP_PATH\"" . auto/define have=NGX_HTTP_SCGI_TEMP_PATH value="\"$NGX_HTTP_SCGI_TEMP_PATH\"" . auto/define#創(chuàng)建編譯時(shí)使用的objs/Makefile文件 . auto/make#為obj/Makefile接入需要連接的第三方靜態(tài)庫、動(dòng)態(tài)庫或者目標(biāo)文件 . auto/lib/make#為obj/Makefile加入install功能,當(dāng)執(zhí)行make install時(shí)將編譯生成的必要文件復(fù)制到安裝路徑 . auto/install# STUB 在ngx_auto_config.h文件中加入NGX_SUPPRESS_WARN宏、NGX_SMP宏 . auto/stubs#在ngx_auto_config.h文件中指定NGX_USER和NGX_GROUP宏如果執(zhí)行configure時(shí)沒有參數(shù)指定。默認(rèn)兩者都為NOBODY(也就是默認(rèn)喲nobody用戶運(yùn)行進(jìn)程) have=NGX_USER value="\"$NGX_USER\"" . auto/define have=NGX_GROUP value="\"$NGX_GROUP\"" . auto/defineif [ ".$NGX_BUILD" != "." ]; thenhave=NGX_BUILD value="\"$NGX_BUILD\"" . auto/define fi#顯示configure執(zhí)行的結(jié)果,如果失敗,則給出原因 . auto/summary?
總結(jié)
以上是生活随笔為你收集整理的Nginx —— configure文件详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

- 上一篇: Linux 与 硬件 —— 各个硬件设备
- 下一篇: Nginx —— configure的命