NGINX学习笔记(一):一篇了解NGINX的基本概念

NGINX是什么?

NGINX是一款由俄罗斯人伊戈尔·赛索耶夫使用C语言开发的、支持热部署的、轻量级的WEB服务器/反向代理服务器/电子邮件代理服务器,因为占用内存较少,启动极快,高并发能力强,所以在互联网项目中广泛应用。可以在 UNIX、GNU/Linux、BSD、Mac OS X、Solaris,以及 Microsoft Windows 等操作系统中运行。

NGINX可以干什么?

NGINX可以作为静态页面的WEB服务器,同时还支持CGI协议的动态语言,比如Perl、PHP等。NGINX专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,NGINX在官方测试中,能够支持五万个平行链接,而在实际的运作中,可以支持二万至四万个平行链接,总结如下:

  • 静态页面的WEB服务器
  • 动静分离
  • 客户端的正向代理
  • 服务端的反向代理
  • 服务端的负载均衡

指令?

NGINX中的配置项称为指令,指令由名称和参数构成,以分号结尾。

指令类型?

NGINX中共有三种类型的指令,每种类型都有其独有的继承模型。

  1. 从配置复杂度上讲,分为:
  • 普通指令,在同一个上下文中只能有一个普通指令,子上下文可以覆盖父上下文的指令,此覆盖仅在给定的子上下文中有效,如:gzip。
  • 数组指令,在同一个上下文中能够添加多条数组指令,多条指令之间是增加的关系而不是覆盖,但是,在子上下文中定义后的指令,将覆盖给定子上下文中父级的所有值,如:error_log。
  • 动作指令,用于改变事物的指令叫动作指令,继承模型会根据各个指令的特性不同而不同,如:location、rewrite、return等等。
  1. 从形态上讲,分为:
  • 简单指令,简单指令由名称和参数组成,以空格分隔并以分号结尾。
  • 块指令,块指令的结构类似于简单指令,但它不是以分号结尾,而是以一组用大括号 { 和 } 括起来的附加指令结尾。

上下文?

NGINX中被大括号包围的区域,称为放置指令的上下文,上下文可以嵌套在其他上下文中,形成上下文层次结构。如:全局上下文、事件上下文、邮件上下文、HTTP上下文、UP-STREAM上下文、服务器上下文等等。LOCATION上下文。

什么是简单请求?

请求同时满足以下两个条件,称为简单请求,否则为复杂请求

  1. 请求方式是HEAD、GET、POST 三种之一;
  2. 请求头包含但不超过这五个字段:Accept,Accept-Language,content-Language,Last-Event-ID,Content-Type。其中Content-Type的值只能是application/x-www-form-urlencoded,text/plain,multipart/form-data 三种之一。

什么是复杂请求?

凡是不简单请求的,都属于复杂请求,常见的复杂请求:

  1. 请求方法是 PUT 或 DELETE的请求;
  2. 请求头的Content-Type 值为application/json的请求

什么是动静分离?

动静分离,其实就是使用NGINX的特性,将客户端发来的请求分为动态请求和静态请求。静态请求直接从NGINX服务器所设定的根目录去获取对应的资源,动态请求则转发给真实的后端服务去处理。这样不仅能够减轻应用服务器的压力,将后台API接口服务化,还能将前后端代码分开并行开发和部署。一般常见于SPRINGBOOT + VUE的项目中。
那么,如何配置呢?

什么是正向代理?

正向代理隐藏了真实的客户端,VPN其实就是一个正向代理工具。当使用VPN访问墙外网站是,VPN将访问请求,代理到一个可以访问该网站的代理服务器上,代理服务器把墙外服务器上获取的请求结果,再转发给客户端,这就是正向代理。
在这里插入图片描述

什么是反向代理?

反向代理隐藏了真实的服务端,当我们访问百度时,其实内部会进行一个转发,将请求代理到内网去,但是具体是哪一台,我们不知道,我们也不需要知道,这就是所谓的反向代理,即反向代理“代理”的是服务器端,且这个过程对于客户端而言是透明的。
负载均衡采用的就是反向代理。
在这里插入图片描述

什么是负载均衡?

在互联网项目中,当遇到请求爆发式增长的情况时,单个服务器无法处理客户端请求,需要使用多个服务器来分摊压力,这就是负载均衡的初衷。
在这里插入图片描述

NGINX是如何工作的?

NGINX采用MASTER-WORKER的模式,NGINX在启动后,会以守候进程的方式在后台运行,启动后包含一个MASTER进程和多个WORKER进程,WORKER进程以非root用户运行,当然也可以在配置文件中配置运行 WORKER进程的用户。
在这里插入图片描述
WORKER进程的个数由配置文件决定,一般和CPU个数相关(有利于进程切换),配置几个就有几个WORKER进程。
在这里插入图片描述

那么,如何配置WORKER的用户以及进程数呢?

NGINX的整体架构在这里插入图片描述

  1. MASTER进程:不处理请求,主要负责加载和分析配置文件、分配请求给WORKER节点、管理WORKER进程、平滑升级、服务重启、热加载、热部署等;
  2. WORKER进程:接收客户端请求、将请求一次送入各模块过滤、I/O 调用、数据缓存、发送响应;
  3. 缓存相关进程:包括cache loader(缓存索引重建) 与 cache manager( 缓存索引管理) 两部分:
    • Cache loader ,在NGINX服务启动后由主进程生成,根据本地磁盘上缓存建立索引元数据库后退出;
    • Cache manager ,在元数据更新完成后,对元数据是否过期做出判断。

NGINX是如何热加载的?

所谓热部署,就是配置文件nginx.conf修改后,不需要停止NGINX服务,不需要中断请求,就能让配置文件生效!但是,NGINX必须重新加载一下nginx.conf,否则修改不生效。
使用如下命令,重新加载配置文件:

nginx -s reload

当配置文件nginx.conf修改后,需要执行重新加载配置的指令,此时NGINX接收到热加载的信号后,会重新生成新的WORKER进程,当然也是以新的配置进行请求处理的,而且新的请求一定会交给新的WORKER进程。当老的WORKER进程处理完请求后,进程会被杀死。

NGINX的目录结构

我是手动编译安装的,在安装时设置安装文件的路径(将软件安装在:/opt/software/nginx-1.18.0/target目录下), 执行命令:

./configure --prefix=/opt/software/nginx-1.18.0/target --with-http_stub_status_module --with-http_ssl_module

安装完毕以后的目录为:/opt/software/nginx-1.18.0/target

├── client_body_temp                 # POST方式大文件暂存目录
├── conf                             # NGINX所有配置文件的目录
│   ├── fastcgi.conf                 # fastcgi相关参数的配置文件
│   ├── fastcgi.conf.default         # fastcgi.conf的原始备份文件
│   ├── fastcgi_params               # fastcgi的参数文件
│   ├── fastcgi_params.default       
│   ├── koi-utf
│   ├── koi-win
│   ├── mime.types                   # 媒体类型
│   ├── mime.types.default
│   ├── nginx.conf                   #这是NGINX默认的主配置文件, 日常使用和修改的文件, 我们一般都操作这个文件
│   ├── nginx.conf.default
│   ├── scgi_params                  # scgi相关参数文件
│   ├── scgi_params.default  
│   ├── uwsgi_params                 # uwsgi相关参数文件
│   ├── uwsgi_params.default
│   └── win-utf
├── fastcgi_temp                     # fastcgi临时数据目录
├── html                             # NGINX默认站点目录
│   ├── 50x.html                     # 错误页面优雅替代显示文件, 例如出现502错误时会调用此页面
│   └── index.html                   # 默认的首页文件
├── logs                             # NGINX日志目录
│   ├── access.log                   # 访问日志文件
│   ├── error.log                    # 错误日志文件
│   └── nginx.pid                    # pid文件, NGINX进程启动后, 会把所有进程的ID号写到此文件
├── proxy_temp                       # 临时目录
├── sbin                             # NGINX可执行文件目录
│   └── nginx                        # NGINX二进制可执行程序
├── scgi_temp                        # 临时目录
└── uwsgi_temp                       # 临时目录
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cloneme01

谢谢您的支持与鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值