官方网站
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