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文件详解相关推荐
- Nginx(5)-nginx.conf文件详解
有了以上博文知识基础,我们可以看看nginx的配置文件:nginx.conf的各项参数代表神马意思了!!! 转载:http://www.nginx.cn/76.html #运行用户 user nobo ...
- nginx.conf文件详解
https://www.jb51.net/article/103968.htm https://www.cnblogs.com/zhang-shijie/p/5428640.html https:// ...
- CentOs8安装、CentOs8中文拼音输入法安装、Nginx安装配置详解
文章目录 CentOs8安装配置 CentOs8安装中文拼音输入法 CentOs8快捷键设置 CentOs8 Nginx安装 1.安装gcc 2.pcre.pcre-devel安装 3.zlib安装 ...
- Nginx配置文件nginx.conf中文详解(转)
######Nginx配置文件nginx.conf中文详解######定义Nginx运行的用户和用户组 user www www;#nginx进程数,建议设置为等于CPU总核心数. worker_pr ...
- nginx.conf配置详解
######Nginx配置文件nginx.conf中文详解######定义Nginx运行的用户和用户组 user www www;#nginx进程数,建议设置为等于CPU总核心数. worker_pr ...
- webpack打包后引用cdn的js_利用CDN加速react webpack打包后的文件详解
此文不介绍webpack基本配置,如果对基本配置有疑问请查阅官方文档. 1.配置webpack.config.js 将output.publicPath改成上传到的cdn地址, 例(对应上面上传配置) ...
- php 表单提交文件大小,PHP如何通过表单直接提交大文件详解
PHP如何通过表单直接提交大文件详解 前言 我想通过表单直接提交大文件,django 那边我就是这么干的.而对于 php 来说,我认为尽管可以设置最大上传的大小,但最大也无法超过内存大小,因为它无法把 ...
- nginx.conf 配置文件详解
本文来说下nginx.conf 配置文件详解 文章目录 Nginx 配置文件概述 nginx.conf 配置文件 通用(这里是 windows 系统系 nginx1.14.2 下 nginx.conf ...
- Nginx之location详解
root location中root指定的只是相对路径,需要和路径结合起来映射地址,比如 location ^~/static/ { ## 这里的root需要和路径结合使用,即是映射的文件位置为 /u ...
最新文章
- SQLServer2000同步复制技术实现步骤(收藏)
- HTML5 placeholder在低版本浏览器的解决方法
- 计算机视觉开源库OpenCV之绘制轮廓函数cv2.drawContours()介绍
- 初学Java Web(3)——第一个Servlet
- 【练习】2021下半年数据结构刷题笔记和总结 (二) 树、查找-- 不同的排序算法、二叉排序树 平衡二叉树、哈希表查找、线索二叉树、
- 2021年第十二届蓝桥杯 - 省赛 - C/C++大学C组 - D.相乘
- CALL FOR DUTY 来和我们一起冒险吧!
- 设计模式工作笔记-简单工厂场景与实现(针对接口编程的设计思想)
- oracle undo head,淺談Oracle的undo管理
- 【LeetCode】剑指 Offer 45. 把数组排成最小的数
- 熊孩子倾家荡产玩游戏、打赏主播有救了!最高法:无效,可退还
- 2021年河南省高考成绩啥时候查询,2021年河南高考成绩什么时候出来,今天几点钟出成绩可以查询...
- 用聚宽量化炒股-5获取数据函数-6)获取指数成分股代码函数get_index_stocks
- android仿酷狗界面,Android仿酷狗动感歌词(支持翻译和音译歌词)显示效果
- 火焰检测网络(October, 2018,ICIP)
- 探秘app.asar
- 简单易用的运动控制卡(十二):运动控制系统的安全设置
- 金蝶K3案例教程销售管理前台操作
- python求列表的中位数_python中获取中位数的两种方法
- 深入理解Android音视频同步机制(二)ExoPlayer的avsync逻辑