`
Poechant
  • 浏览: 230812 次
博客专栏
Bebe66e7-3a30-3fc9-aeea-cfa3b474b591
Nginx高性能Web服务...
浏览量:24364
5738817b-23a1-3a32-86de-632d7da73b1e
Cumulus实时媒体服务...
浏览量:22128
社区版块
存档分类
最新评论

解剖Nginx·自动脚本篇(1)解析配置选项脚本 auto/options

 
阅读更多

解剖 Nginx ·自动脚本篇(1)解析配置选项脚本 auto/options

  • Author: Poechant
  • Blog:blog.CSDN.net/Poechant
  • Email: zhongchao.ustc#gmail.com (#->@)
  • Date: March 4th, 2012
  • Copyright © 柳大·Poechant

在安装Nginx之前(即运行make脚本之前),首先是进行安装的配置准备,包括环境检查及生成文件。这些工作是由自动脚本完成的。和绝大多数软件一样,Nginx的自动脚本的入口,同样是名为configure的文件。

除了configure,其他的自动脚本都在auto目录下。通过分析configure脚本源码,我们可以看到,configure首先运行了auto目录下的几个自动脚本,如下:

. auto/options
. auto/init
. auto/sources

其中通过运行auto/options脚本,来设定配置选项。下面将逐步分析auto/options脚本是如何工作的。

1 读取configure配置参数

开始先声明了 N 多变量,然后最主要的部分从这段开始:

opt=

for option
    do
    ...
done

这段实际上是处理运行./configure的时候携带的参数选项,for循环每次对应一个参数选项 option。要注意for循环体上面有一个全局的opt变量。这个循环体内的第一个语句是最重要是,它是:

opt="$opt `echo $option | sed -e \"s/\(--[^=]*=\)\(.* .*\)/\1'\2'/\"`"

通过循环运行该语句后,opt的值就是一个由空格来分隔的参数列表。然后在循环体中接下来是一个case-esac,用来得到参数值,如下:

case "$option" in
    -*=*) value=`echo "$option" | sed -e 's/[-_a-zA-Z0-9]*=//'` ;;
       *) value="" ;;
esac

其含义是将value赋值为参数选项值,如果选项值不与-*=*的模式匹配,则value值为""。接下来的case-esac语句用来匹配参数的类型。

    case "$option" in
        --help)                          help=yes                   ;;
        --prefix=)                       NGX_PREFIX="!"             ;;
        --prefix=*)                      NGX_PREFIX="$value"        ;;
        --sbin-path=*)                   NGX_SBIN_PATH="$value"     ;;
        --conf-path=*)                   NGX_CONF_PATH="$value"     ;;
        ...
    esac

各匹配的分支语句中进行配置变量的赋值。这些变量在auto/options脚本的最开始处赋以默认值,其中那些模块配置变量被赋以YES的表示默认开启,赋以NO的表示默认关闭。但它们开启与否由这个auto/options中的case-esac语句来决定。还有一些是安装相关的选项变量也在这里被赋值,比如:

  • prefix参数值被赋予NGX_PREFIX
  • sbin-path参数值被赋予NGX_SBIN_PATH
  • conf-path参数值被赋予NGX_CONF_PATH
  • error-log-path参数值被赋予NGX_ERROR_LOG_PATH
  • pid-path参数值被赋予NGX_PID_PATH
  • lock-path参数值被赋予NGX_LOCK_PATH

如果option并不符合预设的这些匹配,也就是用户使用configure脚本的时候携带的参数错误,则auto/options会匹配该语句:

*)
    echo "$0: error: invalid option \"$option\""
    exit 1

从而提示用户参数错误,并使脚本退出运行。经过多次循环,for-do-done就结束。

2 设定NGX_CONFIGURE变量

处理完所有option后,opt就如我们上面提到的,成为由空格分割的配置项值,并被赋给NGX_CONFIGURE变量:

NGX_CONFIGURE="$opt"

3 是否显示configure的帮助信息

再看下面这句:

if [ $help = yes ]; then
cat << END
    …
END
    exit 1
fi

默认情况下$help变量值在初始化时就为no。如果configure选项中指定了help参数,则$help参数为yes,则会运行cat命令,显示大段的帮助信息,然后退出。

4 是否关闭 HTTP 功能

默认情况下HTTP的一些基本功能是被开启的,如果用户指定了--without-http参数,则变量HTTP会被赋值为NO,则下面这段代码if-fi中的语句会被执行:

if [ $HTTP = NO ]; then
    HTTP_CHARSET=NO
    HTTP_GZIP=NO
    HTTP_SSI=NO
    HTTP_USERID=NO
    HTTP_ACCESS=NO
    HTTP_STATUS=NO
    HTTP_REWRITE=NO
    HTTP_PROXY=NO
    HTTP_FASTCGI=NO
fi

5 是否指定运行于 Windows 平台

如果显式指定了--crossbuild参数,则变量NGX_PLATFORM会被赋予当前for-do-done循环中的"$value"值,也就是--crossbuild的参数值,一般在考虑在Windows平台使用时才会用到,看下面的语句:

if [ ".$NGX_PLATFORM" = ".win32" ]; then
    NGX_WINE=$WINE
fi

如果指定--crossbuild=win32,则NGX_WINE就会被赋值了。

6 Nginx 配置文件路径

在加载configure的参数时,如果没有指定了--conf-path参数,则$NGX_CONF_PATH变量是没有值的,则下面的语句会为NGX_CONF_PATH赋以conf/nginx.conf的缺省值。不过我在想老毛子 Igor Sysoev 同学完全可以在auto/options开始处和其他参数一样先指定NGX_CONF_PATH的默认值。

NGX_CONF_PATH=${NGX_CONF_PATH:-conf/nginx.conf}

然后获取配置文件所在目录的:

NGX_CONF_PREFIX=`dirname $NGX_CONF_PATH`

如果指定参数--conf-path=/home/michael/nginx/conf/nginx.conf,则NGX_CONF_PREFIX的值就是/home/michael/nginx/conf

7 Nginx 进程 ID 文件和锁文件路径

下面是同样的方式初始化NGX_PID_PATHNGX_LOCK_PATH,分别对应configure参数--pid-path--lock-path,其缺省值分别为logs/nginx.pidlogs/nginx.lock

NGX_PID_PATH=${NGX_PID_PATH:-logs/nginx.pid}
NGX_LOCK_PATH=${NGX_LOCK_PATH:-logs/nginx.lock}

8 错误日志文件路径

如果指定了参数--error-log-pathNGX_ERROR_LOG_PATH变量的值会被指定,根据下面的语句,如果指定的是stderr则将NGX_ERROR_LOG_PATH修改为空,即不需要错误日志文件。如果不是标准输出,且其值为空,则设置为缺省值logs/error.log

if [ ".$NGX_ERROR_LOG_PATH" = ".stderr" ]; then
    NGX_ERROR_LOG_PATH=
else
    NGX_ERROR_LOG_PATH=${NGX_ERROR_LOG_PATH:-logs/error.log}
fi

9 HTTP 相关各路径

NGX_HTTP_LOG_PATH=${NGX_HTTP_LOG_PATH:-logs/access.log}
NGX_HTTP_CLIENT_TEMP_PATH=${NGX_HTTP_CLIENT_TEMP_PATH:-client_body_temp}
NGX_HTTP_PROXY_TEMP_PATH=${NGX_HTTP_PROXY_TEMP_PATH:-proxy_temp}
NGX_HTTP_FASTCGI_TEMP_PATH=${NGX_HTTP_FASTCGI_TEMP_PATH:-fastcgi_temp}
NGX_HTTP_UWSGI_TEMP_PATH=${NGX_HTTP_UWSGI_TEMP_PATH:-uwsgi_temp}
NGX_HTTP_SCGI_TEMP_PATH=${NGX_HTTP_SCGI_TEMP_PATH:-scgi_temp}

10 Perl 模块

如果指定了--with-perl_modules_path参数,则NGX_PERL_MODULES变量即被设定。如果指定的值为一个绝对路径或未指定(空),则当做相对路径来处理,设定为$NGX_PREFIX/$NGX_PERL_MODULES

case ".$NGX_PERL_MODULES" in
    ./*)
    ;;

    .)
    ;;

    *)
        NGX_PERL_MODULES=$NGX_PREFIX/$NGX_PERL_MODULES
    ;;
esac

11 小结

通过运行auto/options脚本,所有的配置项已经被正确解析并加载到相应的配置变量中了。

-

转载请注明来自“柳大的CSDN博客”:blog.csdn.net/Poechant

-

分享到:
评论

相关推荐

    nginx一键安装包含自动安装脚本

    **Nginx 一键安装与自动化脚本** 在IT行业中,服务器配置和管理是一项重要的任务,尤其是在处理Web服务时。Nginx是一款高性能的HTTP和反向代理服务器,以其高效、稳定和轻量级的特性而广受欢迎。本文将详细讨论如何...

    自动reload nginx解决nginx对动态域名不重新解析的Shell脚本

    current_ip=$(grep -oP 'server \K[\d.]+' /etc/nginx/sites-enabled/your-site.conf) # 比对新旧IP if [ "$current_ip" != "$(get_latest_ip)" ]; then echo "IP地址已更改,正在重新加载Nginx配置..." # 执行...

    检测网站状态网站挂了自动重启nginx服务脚本 运行多年无人值守

    检测网站状态并自动重启Nginx服务的脚本通常用于服务器管理中,当网站不可访问时(比如网页加载超时或者返回错误码),该脚本可以定期检查网站的响应情况。这个过程一般包含以下几个步骤: 1. **监控脚本**:编写一...

    window下nginx启动脚本

    nginx配置修改后运行此脚本启动nginx。 其脚本的作用往往是简化了启动的便利

    nginx 启动脚本

    通常,Nginx的启动脚本位于操作系统的服务管理目录下,如Linux系统中的`/etc/init.d/nginx`或`/usr/local/nginx/sbin/nginx`。这些脚本包含了启动、停止、重启Nginx服务的相关命令,并与系统的服务管理系统(如...

    nginx 自动化安装脚本

    nginx 自动化安装脚本,下载直接运行安装就可以,还集成了限制国家ip模块

    ubuntu自动安装nginx php脚本

    ubuntu自动安装nginx php脚本ubuntu自动安装nginx php脚本

    nginx自动化安装shell脚本

    nginx自动化安装shell脚本

    Centos7系统自动安装nginx脚本

    Centos7系统自动安装nginx脚本, 由于每次安装新的环境如果需要 Nginx 的话都需要进行一次手动安装,为了减轻重复工作,书写自动安装 Nginx 安装脚本

    nginx添加站点脚本

    Nginx通过配置文件(通常位于`/etc/nginx/nginx.conf`)管理多个站点,每个站点都有自己的配置块,通常称为`server`块。 ### 2. 添加站点脚本的作用 添加站点脚本是为了简化Nginx站点配置过程,避免手动编写配置...

    一键安装Nginx脚本+源码

    `install_nginx-v2.sh` 脚本通常是为了简化 Nginx 的安装过程而编写的,它会自动完成下载、编译、配置和安装等步骤。这种自动化方式对于初学者或者需要快速部署环境的开发者来说非常方便,减少了手动操作的复杂性和...

    Linux自动化脚本安装Nginx使用说明

    同时,要确保`/etc/nginx/sites-available`和`/etc/nginx/sites-enabled`目录下的配置文件正确链接。 5. **启动与检查Nginx**:安装后,可以使用`sudo systemctl start nginx`来启动Nginx服务,`sudo systemctl ...

    windows启动nginx.bat脚本

    windows启动nginx脚本

    nginx自动编译部署

    这两个脚本通常包含了一系列自动化步骤,如安装依赖、配置编译选项、编译源代码、安装二进制文件以及启动Nginx服务。 使用这些脚本,我们可以按照以下流程操作: 1. 解压Nginx源代码:`tar -zxvf nginx-1.12.0.tar....

    nginx开机启动脚本

    #### 脚本结构解析 ### 标题与描述 - **标题**:“nginx开机启动脚本” - **描述**:“nginx开机启动脚本” 这两个部分明确指出了脚本的主要目的:实现 Nginx 在系统启动时的自动启动功能。 ### 标签 - **标签*...

    自动化脚本一键生成Nginx https证书证书格式为pem

    总结,本文介绍了自动化脚本生成Nginx HTTPS PEM证书的方法,涉及了生成RSA密钥对、创建CSR、获取证书、配置Nginx以及证书格式转换等关键步骤。了解并掌握这一过程,对于管理和维护安全的Web服务至关重要。

    nginx_nginx安装脚本_

    1. **自动化流程**:手动安装Nginx涉及多个步骤,包括下载源码、编译、配置等,而脚本可以自动化这些过程,节省时间和减少出错可能性。 2. **简化复杂性**:对于不熟悉Linux系统或Nginx配置的用户,安装脚本提供了一...

    Nginx日志自动归档备份shell脚本log.sh

    Nginx日志自动归档备份shell脚本log

    开启、停止 nginx 的shell脚本

    Nginx 配置文件通常位于 `/etc/nginx/nginx.conf` 或 `/etc/nginx/sites-enabled/` 目录下。你可以根据需要自定义配置来满足特定的服务器需求,例如设置虚拟主机、调整日志记录等。 “工具”可能意味着这个脚本是一...

    linux安装nginx一键脚本(自己用过)

    linux安装nginx一键脚本(自己用过,完美可用),这个文件是nginx.sh,可以在linux的小黑框中,先上传到服务器自己想安装的目录,然后找到找到这个目录再找到这个文件,执行sh nginx.sh即可自动安装。

Global site tag (gtag.js) - Google Analytics