当前位置: 首页 > 后端技术 > PHP

深入了解Nginx的编译安装过程

时间:2023-03-29 18:35:26 PHP

编译适合自己的Nginx安装方式Nginx二进制文件会有问题,因为Nginx二进制文件会直接编译模块。并不是所有的Nginx官方模块都是默认启用的。如果要添加第三方Nginx模块,则必须编译Nginx,为Nginx添加第三方模块。编译安装Nginx流程下载NginxNginx下载官网进入官网后点击右下角的下载发现Nginx有两个版本,一个是Mainline版本(最新版本),一个是Stable版本(稳定版)。我们一般选择下载稳定版(这里最新的是1.18.0),选择稳定版,复制下载链接,通过wget下载。下载后是一个压缩包,可以通过以下命令解压tar-xzfnginx-1.18.0.tar.gz各目录介绍解压后进入源码目录,可以看到如下结构auto目录,其中cc目录用于编译,还有lib库,os目录供所有操作系统判断。其他文件用于确定执行configure脚本时Nginx支持哪些模块,以及Nginx可以使用当前操作系统的哪些特性。CHANGES文件CHANGES文件记录了Nginx各个版本提供了哪些特性和bug修复,部分内容截图CHANGES.ru文件因为Nginx的作者是俄罗斯人,所以这是一个俄语CHANGES文件。将安装目录中的示例文件复制到配置脚本中。配置脚本用于生成中间文件并在编译前执行必要的操作。contrib目录提供了两个脚本和一个vim工具。例如,如果不使用它提供的vim工具,当你打开Nginx配置文件时,你会发现颜色没有变化(可以看到Nginx配置文件的语法,在vim中没有高亮显示)和现在将contrib目录下的所有vim文件复制到本地安装的vim目录下sudocp-rcontrib/vim/*~/.vim/然后打开Nginx配置文件html目录。该目录提供了两个标准的html文件。一种是发现500错误时重定向到50x.html文件。另一种是默认的Nginx欢迎界面man目录man目录是linux对Nginx的帮助文件(打开命令:man./nginx.8)src目录src目录是Nginx的源码目录Configure在编译编译之前,可以看看Configure支持哪些参数./configure--help|more它的参数主要分为几大块:第一类是确定在Nginx执行过程中,它会在目录中找哪些文件作为它的辅助文件。例如,如果需要动态模块,--modules-path=PATH就可以了。如果没有变化,只需要指定--prefix=PATH参数,其他所有文件都会在prefix指定的目录下创建相应的文件夹。第二类主要是确定哪些模块用,哪些不用,通常以--with-和--without-为前缀。比如--with-http_ssl_module,--with-http_v2_module,通常我们需要主动添加--with模块时,表示默认不会编译进去该模块。编译时需要使用--without-,即默认会编译到Nginx中。如果不加这个参数,会被编译进去,如果加--without-,则不会被编译进去。第三类指定了Nginx编译时需要的一些特殊参数。比如用gcc编译时,需要加什么样的优化参数,或者需要打印dubug级别的log,就用默认参数编译Nginx,下面指定Nginx的安装目录./configure--prefix=/home/geek/nginx如果执行过程中没有报错,说明Nginx编译成功。此时,Nginx的所有配置特性和运行时目录都会列在最下方。编译完成后,会生成一些中间文件。中间文件介绍编译完成后,生成的中间文件会放在解压后的nginx目录下。objs目录下objs目录下的文件结构这里最重要的是生成一个名为ngx_modules.c的文件,这个文件决定了下次执行编译时,哪些模块会被编译到Nginx中。externngx_module_t的每一行后面跟着一个ngxinModules,所有要编译到当前Nginx中的模块,都会在上面列出,它们最终会组成一个指针数组,叫做*ngx_modules[],然后make就可以执行编译了。编译完成后会生成大量的中间文件,以及最终运行的Nginx二进制文件。在objs目录下可以看到为什么要知道Nginx的目标文件放在这里?因为如果我们要升级Nginx版本,此时不能执行makeinstall,而是从这里复制目标文件到安装目录下。C语言编译时产生的所有中间文件都会放在objs下的src目录下。如果我们使用动态模块的话,在编译的时候会生成一个动态文件,这个动态文件也会放在objs目录下。接下来可以执行makeinstall(第一次安装时执行此命令)。执行后,在--prefix执行路径下可以看到如下结构。最重要的Nginx二进制文件在sbin目录下,它决定了Nginx的功能。在conf目录下可以看到配置文件。在conf目录下,所有文件都是从源代码中conf目录下的所有文件复制过来的,内容完全一样。以上就是Nginx的整个编译安装过程Nginx配置文件的一般语法介绍在Nginx的配置文件中,已经指定了它包含哪些模块,但是每个模块都提供了唯一的配置语法,所有的配置语法都会遵循相同的语法规则。配置文件由指令和指令块组成。每条指令以分号结尾,指令和参数之间用空格隔开。指令块用{}大括号组合在一起。include语句允许将多个配置文件组合起来以提高可维护性。使用#conform添加注释以提高可用性。可读性使用$符号使用命令可变部分的参数支持正则表达式http命令块下,通常有四个块:httpserverlocationupstreamhttp后面的大括号表示里面的命令全部由http模块解析执行。非http模块无法解析这里的指令。upstream表示上游服务。当Nginx需要和tomcat等其他服务交互时,可以定义一个upstream。服务器对应一个域名,或者一组域名。位置是一个url表达式