我们晓得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文件详解相关推荐

  1. Nginx(5)-nginx.conf文件详解

    有了以上博文知识基础,我们可以看看nginx的配置文件:nginx.conf的各项参数代表神马意思了!!! 转载:http://www.nginx.cn/76.html #运行用户 user nobo ...

  2. nginx.conf文件详解

    https://www.jb51.net/article/103968.htm https://www.cnblogs.com/zhang-shijie/p/5428640.html https:// ...

  3. CentOs8安装、CentOs8中文拼音输入法安装、Nginx安装配置详解

    文章目录 CentOs8安装配置 CentOs8安装中文拼音输入法 CentOs8快捷键设置 CentOs8 Nginx安装 1.安装gcc 2.pcre.pcre-devel安装 3.zlib安装 ...

  4. Nginx配置文件nginx.conf中文详解(转)

    ######Nginx配置文件nginx.conf中文详解######定义Nginx运行的用户和用户组 user www www;#nginx进程数,建议设置为等于CPU总核心数. worker_pr ...

  5. nginx.conf配置详解

    ######Nginx配置文件nginx.conf中文详解######定义Nginx运行的用户和用户组 user www www;#nginx进程数,建议设置为等于CPU总核心数. worker_pr ...

  6. webpack打包后引用cdn的js_利用CDN加速react webpack打包后的文件详解

    此文不介绍webpack基本配置,如果对基本配置有疑问请查阅官方文档. 1.配置webpack.config.js 将output.publicPath改成上传到的cdn地址, 例(对应上面上传配置) ...

  7. php 表单提交文件大小,PHP如何通过表单直接提交大文件详解

    PHP如何通过表单直接提交大文件详解 前言 我想通过表单直接提交大文件,django 那边我就是这么干的.而对于 php 来说,我认为尽管可以设置最大上传的大小,但最大也无法超过内存大小,因为它无法把 ...

  8. nginx.conf 配置文件详解

    本文来说下nginx.conf 配置文件详解 文章目录 Nginx 配置文件概述 nginx.conf 配置文件 通用(这里是 windows 系统系 nginx1.14.2 下 nginx.conf ...

  9. Nginx之location详解

    root location中root指定的只是相对路径,需要和路径结合起来映射地址,比如 location ^~/static/ { ## 这里的root需要和路径结合使用,即是映射的文件位置为 /u ...

最新文章

  1. SQLServer2000同步复制技术实现步骤(收藏)
  2. HTML5 placeholder在低版本浏览器的解决方法
  3. 计算机视觉开源库OpenCV之绘制轮廓函数cv2.drawContours()介绍
  4. 初学Java Web(3)——第一个Servlet
  5. 【练习】2021下半年数据结构刷题笔记和总结 (二) 树、查找-- 不同的排序算法、二叉排序树 平衡二叉树、哈希表查找、线索二叉树、
  6. 2021年第十二届蓝桥杯 - 省赛 - C/C++大学C组 - D.相乘
  7. CALL FOR DUTY 来和我们一起冒险吧!
  8. 设计模式工作笔记-简单工厂场景与实现(针对接口编程的设计思想)
  9. oracle undo head,淺談Oracle的undo管理
  10. 【LeetCode】剑指 Offer 45. 把数组排成最小的数
  11. 熊孩子倾家荡产玩游戏、打赏主播有救了!最高法:无效,可退还
  12. 2021年河南省高考成绩啥时候查询,2021年河南高考成绩什么时候出来,今天几点钟出成绩可以查询...
  13. 用聚宽量化炒股-5获取数据函数-6)获取指数成分股代码函数get_index_stocks
  14. android仿酷狗界面,Android仿酷狗动感歌词(支持翻译和音译歌词)显示效果
  15. 火焰检测网络(October, 2018,ICIP)
  16. 探秘app.asar
  17. 简单易用的运动控制卡(十二):运动控制系统的安全设置
  18. 金蝶K3案例教程销售管理前台操作
  19. python求列表的中位数_python中获取中位数的两种方法
  20. 深入理解Android音视频同步机制(二)ExoPlayer的avsync逻辑

热门文章

  1. Spring boot 梳理 - 在bean中使用命令行参数-自动装配ApplicationArguments
  2. poj 2987 Firing【最大权闭合子图+玄学计数 || BFS】
  3. Ueeidor 使用
  4. 分享一份JS前端面试题
  5. 四.Android adb命令(持续更新...)
  6. [WP]关于WP7的后台的一些小事情
  7. mysql怎么设置计划任务_mysql设置定时任务
  8. ubuntu自动挂载NTFS的方法
  9. C中strcpy函数实现
  10. libpcap介绍(一)