ngnix安装环境

a)epoll,linux 内核版本为2.6或者以上;
b)gcc编译器,g++编译器
c)pcre库:函数库;支持解析正则表达式;
d)zlib库:压缩解压缩功能
e)openssl库:ssl功能相关库,用于网站加密通讯

nginx源码下载以及目录结构简单认识

nginx官网 http://www.nginx.org

nginx的几种版本

(1)mainline版本:版本号中间数字一般为奇数。更新快,一个月内就会发布一个新版本,最新功能,bug修复等,稳定性差一点;

(2)stable版本:稳定版,版本号中间数字一般为偶数。经过了长时间的测试,比较稳定,商业化环境中用这种版本;这种版本发布周期比较长,几个月;

(3)Legacy版本:遗产,遗留版本,以往的老版本;

安装,现在有这种二进制版本:通过命令行直接安装;

灵活:要通过编译 nginx源码手段才能把第三方模块弄进来;

nginx 目录

auto/:编译相关的脚本,可执行文件configure会用到这里面的脚本
cc/:检查编译器的脚本
lib/:检查依赖库的脚本
os/:检查操作系统类型的脚本
type/:检查平台类型的脚本
CHANGES:这个文件是一些修复的bug,新增功能等说明性文件
CHANGES.ru:俄语版本
conf/:默认的配置文件,用于控制ngnix行为
configure:可执行文件,其实是一个脚本,配置环境,产生的ngnix的一些中间文件会用上
contrib/:脚本和工具,典型的是vim高亮工具
vim/:vim高亮查看nginx.conf -cp -r contrib/vim/* ~/.vim/
html/:文件里有两个超文本文件,错误重定向界面和欢迎界面
man/:ngnix帮助文件
README/:
src/:ngnix源码目录
core:核心代码
event:事件模块相关代码
http:web服务模块相关代码
mail:邮件模块相关代码
os:操作系统相关代码
stream:流处理相关代码
objs/:执行configure生成的中间代码目录
ngx_moudules.c:内容决定了一会编译ngnix的时候有哪些模块会编译到ngnix里边来
Makefile:执行了configure脚本产生的编译规则文件,,,执行了make命令时用到

ngnix的编译和安装

  • 编译第一步:用./configure来进行编译之前的配置工作

image-20220122181151644

–prefix:指定最终安装到的目录:默认值 /usr/local/nginx

–sbin-path:用来指定可执行文件目录:默认的是 sbin/ nginx

–conf-path:用来指定配置文件目录:默认的是 conf/nginx.conf

–with:表示启用模块,也就是说这些模块在编译时不会自动构建,

–without:表示禁用模块,也就是说这些模块在编译时会自动构建,若你想Nginx轻量级运行,可以去除一些不必要的模块。

./configure执行完后多了objs目录。

  • 编译第二步:用make来编译,fengyun@ubuntu:~/ngnixsourcecode/nginx-1.20.2$ make

​ 生成可执行文件ngnix
image-20220122203431545

  • 编译第三步:用make来镜像安装 fengyun@ubuntu:~/ngnixsourcecode/nginx-1.20.2$ sudo make install

–perfix: 指定最终安装到的位置,默认如图所示: /usr/local/ngnix

image-20220122204045071

–sbin-path:指定可执行文件目录,默认如图所示 sbin/
image-20220122204502679

–conf-path:用来指定配置文件目录,默认如图所示 conf/ 最重要的是ngnix.conf
image-20220122204701436

ngnix启动和简单使用

启动需要管理员权限fengyun@ubuntu:/usr/local/nginx/sbin$ sudo ./nginx

可以看到成功启动,如图所示

image-20220122205446508

主机试图访问ubantu提供的服务器,如图所示,成功访问

image-20220122205744935

ngnix进程模型

简易概括

1个master进程,1到多个worker进程 这种工作机制来对外服务的;这种工作机制保证了 nginx能够稳定、灵活的运行;

  • a)master进程责任:监控进程,不处理具体业务,专门用来管理和监控worker进程;master,角色是监工,比如清闲;

  • b)worker进程:用来干主要的活的,(和用户交互);

  • c)master进程和worker进程之间要通讯,可以用 信号 ,也可以用 共享内存 ;

  • d)稳定性,灵活性,体现之一:worker进程 一旦挂掉,那么master进程会立即fork()一个新的worker进程投入工作中去;

    image-20220122214615129

调整worker进程数量

image-20220122214647554

如上图所示工作站:2个物理cpu ,蓝色的一个cpu,红色的一个cpu

每个物理cpu里边内核数量,是4个;core1 –core4

每个core里边有两个逻辑处理器(超线程技术/siblings)

16个processors(最细小的单位,也就是平时大家说的处理器个数)

worker进程几个合适呢?公认的做法: 多核计算机,就让每个worker运行在一个单独的内核上,最大限度减少CPU进程切换成本,提高系统运行效率;

物理机:4核(4个processors);

这里我打开ngnix.conf配置文件后将worker_processes修改为4

image-20220122214432598

重新启动ngnix服务器

image-20220122215939286

可以看到有四个worker进程

模型特点-稳定灵活

不需要中断服务就可进行重新配置升级等

  • 1.修改配置文件例如ngnix.conf无需中断用户服务就可以立即使配置文件生效 sudo ./ngnix -s reload

image-20220122220952971

可以看到进程id发生了变化。

  • 2.nginx热升级,热回滚,不停止服务能够进行升级,比如1.14.2–>1.20.2,发现不稳定可以回滚到以前的版本

  • 3.nginx的关闭

    方法一:sudo kill 进程号(过于粗暴)

​ 方法二:-s signal : send signal to a master process: stop, quit, reopen, reload

​ stop 直接退出

​ quit 等服务完再退出