关于nginx:吃透-Nginx-编译安装过程

45次阅读

共计 2728 个字符,预计需要花费 7 分钟才能阅读完成。

编译出适宜本人的 Nginx

Nginx 的装置形式

装置 Nginx 有两种办法,除了编译以外,还能够间接用操作系统上自带的一些工具,比方 yum、apt-get

然而间接装置 Nginx 的二进制文件会有个问题,因为 Nginx 的二进制文件会把模块间接编译进来。Nginx 的官网模块,并不是每一个都默认开启的,如果你想增加第三方的 Nginx 模块,你必须通过编译 Nginx 这种形式能力把第三方的模块增加到 Nginx 中

编译装置 Nginx 过程

下载 Nginx

Nginx 下载官网

进入官网之后,点击右下角的 download

能够发现 Nginx 有两类版本,一个是 Mainline version(最新版本)、一个是 Stable version(稳固版本)。咱们通常会抉择下载稳固版本(这里最新的是 1.18.0)

抉择一个稳固版本,复制下载链接,通过 wget 的形式下载下来即可,下载下来之后是一个压缩包,通过下边命令解压即可

tar -xzf nginx-1.18.0.tar.gz
各目录介绍

进入解压之后的源码目录中,能够看到如下构造

  • auto 目录

其中 cc 目录是用于编译的,还有 lib 库,os 目录是对所有的操作系统进行判断的。其它的文件都是为了在 configure 脚本执行的时候,去断定 Nginx 反对哪些模块,以后操作系统有什么样的个性能够供 Nginx 应用

  • CHANGES 文件

CHANGES 文件记录的是每个 Nginx 版本中提供了哪些个性和 bugfix,局部内容截图

  • CHANGES.ru 文件

因为 Nginx 作者是一个俄罗斯人,所以这是一个俄罗斯语言的 CHANGES 文件

  • conf 目录

它是一个示例目录,就是把 Nginx 装置实现当前,为了不便运维去配置,会把 conf 中的示例文件拷贝到装置目录

  • configure 脚本

configure脚本是一个用来生成两头文件,执行编译前的必备动作

  • contrib 目录

它提供了两个脚本和 vim 的一个工具,比方在没有应用它提供的 vim 工具时关上 Nginx 的配置文件,会发现色调没什么变动(能够看到 Nginx 配置文件的语法,没有在 vim 中高亮的显示)

而后当初将 contrib 目录中下的所有 vim 文件拷贝到本地装置的 vim 目录中

sudo cp -r contrib/vim/* ~/.vim/

而后再关上 Nginx 的配置文件

  • html 目录

该目录中提供了两个规范的 html 文件,一个是发现 500 谬误的时候能够重定向到 50x.html 文件,另外一个是默认的 Nginx 欢送界面

  • man 目录

man 目录是 linux 对 Nginx 的帮助文件(关上命令:man ./nginx.8)

  • src 目录

src 目录是 Nginx 的源代码目录

Configure 编译

编译之前,能够看一下 Configure 反对哪些参数

./configure --help | more

它的参数里边次要分为几个大块:

  1. 第一类,确定 Nginx 执行中,它会去找哪些目录下的文件作为它的辅助文件。比方须要动静模块,此时 –modules-path=PATH 就会产生作用。如果没有任何变动的话,只须要指定 –prefix=PATH 这个参数就能够了,所有的其它的文件都会在 prefix 指定的目录上面建相应的文件夹
  2. 第二类,次要是确定应用和不应用哪些模块,它的前缀通常是 –with- 和 –without-。比如说 –with-http_ssl_module、–with-http_v2_module,通常须要咱们被动加 –with 模块的时候,意味着该模块默认是不会被编译进来的。而编译中须要应用 –without-,意味着默认它会被编译进 Nginx,如果你不加这个参数,他是会被编译进去,如果加了 –without-,它就不会被编译进去
  3. 第三类,指定了 Nginx 编译中须要的一些非凡的参数,比方用 gcc 编译的时候,须要加一些什么样的优化参数,或者说须要打印 dubug 级别的日志

下边就应用默认参数编译一下 Nginx,下边指定了 Nginx 的装置目录

./configure --prefix=/home/geek/nginx

如果在执行的过程中没有报错,就意味着 Nginx 编译胜利了。此时 Nginx 所有配置的个性,以及运行时的目录都会列在最下边

在上边编译实现之后,会生成一些两头文件

两头文件介绍

编译实现之后,生成的两头文件,会放在解压之后的 nginx 目录下的 objs 目录下

objs 目录下文件构造

这里边最重要的是会生成一个文件叫 ngx_modules.c,它决定了接下来执行编译的时候,有哪些模块会被编译进 Nginx

每一行 extern ngx_module_t 后边就是一个 ngxin 模块,所有会被编译进以后 Nginx 中的模块,都会被列在上边,他们最终会造成一个叫 *ngx_modules[]的指针数组

而后就能够执行 make 编译了。编译实现之后,会生成大量的两头文件,以及最终运行的 Nginx 二进制文件,能够在 objs 目录中看到

为什么须要晓得 Nginx 的指标文件是放在这里的?

因为如果咱们要做 Nginx 版本升级,此时不能执行make install,而是从这里把指标文件拷贝到装置目录中

C 语言编译时生成的所有两头文件都会放在 objs 下的 src 目录下,如果咱们应用了动静模块,编译时会生成动静文件,这个动静文件也会放在 objs 目录下。接下来就能够执行 make install(首次装置时执行该命令)

执行完之后,就能够在 –prefix 执行的门路下看到如下构造

这里边最次要的 Nginx 二进制文件就在 sbin 目录下,决定 Nginx 性能的配置文件在 conf 目录下

能够看到在 conf 目录下,所有的文件就是在源代码中那个 conf 目录下所有文件 copy 过去了一份,内容也是截然不同的

以上便是 Nginx 的全副编译装置过程

Nginx 配置文件通用语法介绍

  • Nginx 配置文件中,曾经指定了它蕴含了哪些模块,但每一个模块都提供举世无双的配置语法,这些所有的配置语法,会遵循同样的语法规定
  • 配置文件由指令与指令块形成
  • 每条指令以;分号结尾,指令与参数间以空格分隔
  • 指令块以 {} 大括号将多条指令组织在一起
  • include 语句容许组合多个配置文件以晋升可维护性
  • 应用 #合乎增加正文,进步可读性
  • 应用 $ 符号应用变量
  • 局部指令的参数反对正则表达式

在 http 这个指令块下,通常有四个块:

  1. http
  2. server
  3. location
  4. upstream

http 大括号下边就示意,里边所有的指令,都是由 http 模块去解析执行的,一个非 http 模块是没方法解析这里边的指令的。upstream则是示意上游服务,当 Nginx 须要与 tomcat 等其它服务交互的时候,能够定义一个 upstreamserver 则是对应一个域名,或者一组域名。location则是一个 url 表达式

正文完
 0