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