本文共 3186 字,大约阅读时间需要 10 分钟。
官方网站 nginx的组成部分以及特性 早期的nginx的模块是静态编译,后面的是支持动态编译 不需要停机就可以升级,如果已经有人链接就用旧的服务进程提高服务,当旧的用户访问结束,逐步替换掉旧进程 event-driven 事件驱动,aio异步IO,mmap内存映射,sendfile(讲apache的时候讲过) nginx是静态服务器,要想当php程序的服务器,做不了,要想运行php,就需要安装对应的软件,fastcgi,而且nginx不支持模块方式,只支持fastcgi,独立进程的方式运行 lemp(e取的是engin x )或者lnmp nginx充当php客户端,php充当mysql客户端 可以充当http反向代理服务器,功能强大,但是性能不如LVS 、也可以作为邮件的反向代理 后台的应用程序一般都是用python来承担的 比如django服务器 静态加载就是编译完什么样,就是什么样,不能做到动态加载模块 以前用bbs,现在论坛流行叫forum 就可以用到地址重写(apache 就是有这个alias apahce默认路径就是定义跟的,DOCUMENTROOT,网站的根目录 加上别名就可以改变这个默认行为 可以控制什么用户才能访问 GET是链接memcached,链接缓存用的 也有master进程和worker进程(类似apache有MPM,三种工作模式prefork,event,worker,但是apache prefork,一个master开若干个子进程,每个子进程去响应请求, worke和eventr是三级结构,一个master开多个worker,worker里开多个线程,每个线程响应用户请求) nginx是开若干个worker,但是worker不多,每个worker可以并发支持很多人,1个worker里面没有线程,用的是IO多路复用,可以并发支持多个用户请求,而且不是线程,看不到,可以并发响应上万的请求,在worker里也支持很多模块,每个模块都有特定的功能, master负责管理这些worker进程,比如开启或者销毁一个worker,此外加载配置文件,平滑升级,都是master来管理的, 除了代理功能,其实还有缓存功能,用户发送请求给nginx,niginx不可能告诉用户自己拿,自己缓存一份,下次用户直接访问,省的去后端服务器上拿数据 了,缓存可以放在内存也可以放在磁盘里,存放在磁盘表现为hash的值 这个就是哈希值,将来缓存了,磁盘上就会出现这样的文件 时间驱动,异步,非阻塞 面试题有可能让你说说apache和nginx底层的区别 没有线程都是进程,但是一个进程可以响应多个用户的请求 nginx是模块化的 标准模块主要描述三个主要功能, 1.http相关的功能 2.邮件功能 3.stream功能,可以做tcp的代理,后端可以跑数据库,调度数据库(一般调度的服务器,但是也可以调度数据库,用的不多 ,一般都是http服务器) 官方文档描述的最详细 核心模块,标准模块 就一个谷歌的第三方模块 标准模块又分为http,mail.stream 一个模块就这么多命令 nginx可以作为静态服务器 动态程序如PHPINFO,就要用到fastcgi lvs就是请求转发,反向代理 lvs和反向代理的区别,从拓补结构来讲都是一样的 lvs是通过它帮你把数据包转发过去,对于apache看到的用户请求还是来自于客户端 nginx是帮你把请求转发,把事情左了,所以服务器看到的是nginx的请求 mainline主线版,stable稳定版本,version测试版 nginx是放在epel源里的 epel1.12,官方最新是1.15测试版 最新版也有yum源 yum源路径 不替换变量也没事 创建一个repo 再看nginx 太新了,没有进行充分测试 **有官方的也有阿里云的 ** 如果不清除,yum clean all 可能把1.14装上 文件列表 主配置文件 服务名和nginx主程序 语法检查的,vim的插件 先研究下nginx主进程 用的比较多的t,检查测试语法,配置语法对不对 -T也会测试,不过会把内容打印出来 把非错误信息压缩掉,不显示了 -s发送信号,停服务,退出服务,重新打开服务,加载配置文件 指定配置文件路径,默认就是这个路径 -g可以来指定一些配置文件 -V大v是显示版本信息以及配置选项 现在直接用nginx启动程序 已经启动,说明网站可以访问了 停服务 所以一般在生成环境测试的时候,都用nginx测试 如果启动使用nginx 那么停止服务就不能用systemctl stop,是停止不了的 用什么工具起,就用什么命令停 用systemctl起倒是可以用nginx停止 **为了测试方便,经常启动关闭服务,可能就需要用前台方式来运行。一旦启动,就不会退出,ctrl+c就关闭了 ** 配置文件备份下,待会需要进行大量的修改 下面都是编译选项 下面这个就是可以在一个nginx上搭建多个https网站 apache支持多个虚拟主机,但是不支持多个https的虚拟主机 因为在主配置文件里包含自配置文件才有效 1.web服务器 2.做反向代理 3.做邮件服务器 4.stream tcp/udp 这些功能在实现的时候是放在不同的语句块里的 有些配置不能随便放 这里面的代码只能和http相关 一种是内置变量,模块里就有 自定义变量 位置变量,在官方文档里有 指令索引和变量索引 在nginx的里面引用变量跟shell一样,都是用$符号的 remote_addr要看具体在哪个模块,比如http还是stream 客户端地址 主配置文件大概的格式,main block 主块,对于nginx的主要功能都有效,http服务功能, 邮件,tcp的转发代理 三大块,有一个针对所有功能都有效的全局配置 有一个默认配置文件 全局性设置 http相关的 定义了服务器和加密的实现,都有范例 范例文件可以参考它来设置 主要看和http相关的功能 分成两大块,所有http相关的公共设置,每个虚拟主机的server块,各自的虚拟主机有各自的语句块 实际上nginx配置文件格式语法上更简单 全局配置也就是http前面的一大块,影响所有服务 http服务,邮件服务 tcpudp转发代理服务, 是用nginx身份来运行的 master 带若干worker 一个master带两个worker,这两个worker以nginx身份运行 没有线程,就是两个进程 **这两个worker是以nginx身份来运行的,也可以进行修改 ** 修改了配置文件,进行生效 语法检查再加载比较稳妥一些 默认是nginx账号,但是系统是什么时候生成这个账号 不在这个包里,看看具体在哪个包里 可以一个个查,时间确实是装包的时候修改的 如果将来要编译安装,账号必须手动创建 查看user指令,因为这个代码不是想写哪里就写哪里的 只能放在主要命令语句块里 放在http,就会报错 pid进程编号 这个就是nginx的进程编号 如果服务停止这个pid文件就没有了 启动后这个文件就生成了 删除这个pid文件会如何 停止服务的时候就有问题了,因为把文件删除了,就不知kill哪个进程 下次启动就自动生成了 可以包含配置文件 这里面放的都是加载模块的一些信息 这里面就是模块 根据当前情况自动判断进程数量,之所以有两个worker,是因为有两个cpu内核 修改成4个 但是现在nginx没有自动地变成4个 重启服务,就出来了 是不是多了,处理能力就强了,没有这种说法,并不是进程数量多,就性能好,甚至有时候进程数量过多导致性能下降,每开个进程就要消耗cpu转载地址:http://vfkgn.baihongyu.com/