nginx知识点整理

nginx知识点整理

实验用的是rhel9.4

nginx概述

nginx介绍

Nginx:engine X,2002年开发,分为社区版和商业版(nginx plus)

Nginx是免费的,开源的,高性能的HTTP和反向代理服务器,邮件代理服务器,以及TCP/UDP代理服务器

解决C10K问题(10K connections)

Nginx功能介绍

  • 静态的web资源服务器html,图片,js,css,txt等静态资源
  • http/https协议的反向代理
  • 结合FastCGI/iWSGI/SCGI等协议反向代理动态资源请求
  • tcp/udp协议的请求转发(反向代理)
  • imap4/pop3协议的反向代理

基础特性

  • 模块化设计,较好的扩展性
  • 高可用性
  • 支持热部署:不停机更新配置文件,升级版本,更换日志文件
  • 低内存消耗:10000个keep-alive连接模式下的非活动链接,仅需2.5M内存
  • event_driven,aio,mmap,sendfile

Web服务的相关的功能

  • 虚拟主机(server)
  • 支持keep-alive和管道连接(利用一个链接做多次请求)
  • 访问日志(支持基于日志缓冲提高其性能)
  • url rewrite
  • 路径别名
  • 基于IP及用户的访问控制
  • 支持速率限制及并发数限制
  • 重新配置和在线升级而无需中断客户的工作进程

Nginx架构和进程

在这里插入图片描述

Nginx进程结构

web请求处理机制

  • 多进程方式:服务器每接收到一个客户端请求就有服务器的主进程生成一个子进程响应客户端,直 到用户关闭连接,这样的优势是处理速度快,子进程之间相互独立,但是如果访问过大会导致服务 器资源耗尽而无法提供请求
  • 多线程方式:与多进程方式类似,但是每收到一个客户端请求会有服务进程派生出一个线程和此客 户端进行交互,一个线程的开销远远小于一个进程,因此多线程方式在很大程度减轻了web服务器 对系统资源的要求,但是多线程也有自己的缺点,即当多个线程位于同一个进程内工作的时候,可 以相互访问同样的内存地址空间,所以他们相互影响,一旦主进程挂掉则所有子线程都不能工作 了,IIS服务器使用了多线程的方式,需要间隔一段时间就重启一次才能稳定

Nginx是多进程住址模型,而且是一个由Master主进程和Worker工作进程组成

在这里插入图片描述

主进程(Master process)的功能:

  • 对外接口:接收外部的操作(信号)
  • 对内转发:根据外部的操作的不同,通过信号管理Worker
  • 监控:监控worker进程的运行,worker进程异常终止后,自动重启worker进程
  • 读取Nginx配置文件并盐城其有效性和正确性
  • 建立,绑定和关闭xocket连接
  • 按照配置生成,管理和结束工作进程
  • 接受外界指令,比如重启,升级及退出服务器等指令
  • 不中断服务,实现平滑升级,重启服务并应用新的配置
  • 开启日志文件,获取文件描述符
  • 不中断服务,实现平滑升级,升级失败进行回滚处理
  • 编译和处理perl脚本

工作进程(worker process)的功能:

  • 所有 Worker 进程都是平等的
  • 实际处理:网络请求,由 Worker 进程处理
  • Worker进程数量:一般设置为核心数,充分利用CPU资源,同时避免进程数量过多,导致进程竞争 CPU资源
  • 增加上下文切换的损耗
  • 接受处理客户的请求
  • 将请求依次送入各个功能模块进行处理
  • I/O调用,获取响应数据
  • 与后端服务器通信,接收后端服务器的处理结果
  • 缓存数据,访问缓存索引,查询和调用缓存数据
  • 发送请求结果,响应客户的请求
  • 接收主程序指令,比如重启、升级和退出等

Nginx进程间通信

工作进程是由主进程生成的,主进程使用fork()函数,在Nginx服务器启动过程中主进程根据配置文件决 定启动工作进程的数量,然后建立一张全局的工作表用于存放当前未退出的所有的工作进程,主进程生 成工作进程后会将新生成的工作进程加入到工作进程表中,并建立一个单向的管道并将其传递给工作进 程,该管道与普通的管道不同,它是由主进程指向工作进程的单向通道,包含了主进程向工作进程发出 的指令、工作进程ID、工作进程在工作进程表中的索引和必要的文件描述符等信息

主进程与外界通过信号机制进行通信,当接收到需要处理的信号时,它通过管道向相关的工作进程发送 正确的指令,每个工作进程都有能力捕获管道中的可读事件,当管道中有可读事件的时候,工作进程就 会从管道中读取并解析指令,然后采取相应的执行动作,这样就完成了主进程与工作进程的交互

worker进程之间的通信原理基本上和主进程与worker进程之间的通信是一样的,只要worker进程之间能够 取得彼此的信息,建立管道即可通信,但是由于worker进程之间是完全隔离的,因此一个进程想要知道另外一 个进程的状态信息,就只能通过主进程来实现

为了实现worker进程之间的交互,master进程在生成worker进程之后,在worker进程表中进行遍历,将该 新进程的PID以及针对该进程建立的管道句柄传递给worker进程中的其他进程,为worker进程之间的通信做 准备,当worker进程1向worker进程2发送指令的时候,首先在master进程给它的其他worker进程工作信息 中找到2的进程PID,然后将正确的指令写入指向进程2的管道,worker进程2捕获到管道中的事件后,解析指 令并进行相关操作,这样就完成了worker进程之间的通信

另worker进程可以通过共享内存来通讯的,比如upstream中的zone,或者limit_req、limit_conn中的 zone等。操作系统提供了共享内存机制

Nginx模块介绍

nginx有多种模块:

  • 核心模块:是 Nginx 服务器正常运行必不可少的模块,提供错误日志记录 、配置文件解析 、事件 驱动机制 、进程管理等核心功能
  • 标准HTTP模块:提供 HTTP 协议解析相关的功能,比如: 端口配置 、 网页编码设置 、 HTTP响应 头设置 等等
  • 可选HTTP模块:主要用于扩展标准的 HTTP 功能,让 Nginx 能处理一些特殊的服务,比如: Flash
  • 多媒体传输 、解析 GeoIP 请求、 网络传输压缩 、 安全协议 SSL 支持等
  • 邮件服务模块:主要用于支持 Nginx 的 邮件服务 ,包括对 POP3 协议、 IMAP 协议和 SMTP协议的 支持
  • Stream服务模块: 实现反向代理功能,包括TCP协议代理
  • 第三方模块:是为了扩展 Nginx 服务器应用,完成开发者自定义功能,比如: Json 支持、 Lua 支 持等

nginx高度模块化,但其模块早期不支持DSO机制;1.9.11版本支持动态装载和卸载

模块分类:

  • 核心模块:core module

  • 标准模块:

    HTTP模块: ngx_http_*

    • HTTP Core modules 默认功能
    • HTTP Optional modules 需编译时指定

    Mail模块:ngx_stream_*

    Stream 模块 ngx_stream_*

  • 第三方模块

在这里插入图片描述

Nginx安装

Nginx版本和安装方式

Nginx版本:

  • Mainline version主要开发版本,一般为技术版本号,比如:1.19
  • Stable version 当前最新稳定版,一般为偶数版本,如:1.20
  • Legacy version 旧的稳定版,一般为偶数版本,如:1.18

Nginx安装可以只用yum或源码安装,但是推荐使用源码编译安装

  • yum的版本比较旧
  • 编译安装可以更方便自定义相关路径
  • 使用源码编译可以自定义相关功能,更方便业务上的使用

Nginx编译安装

编译器介绍:

源码安装需要提前准备标准的编译器,GCC的全称是(GNU Compiler collection),其有GNU开发,并以 GPL即LGPL许可,是自由的类UNIX即苹果电脑Mac OS X操作系统的标准编译器,因为GCC原本只能处理C语 言,所以原名为GNU C语言编译器,后来得到快速发展,可以处理C++,Fortran,pascal,objective C, java以及Ada等其他语言,此外还需要Automake工具,以完成自动创建Makefile的工作,Nginx的一些模块 需要依赖第三方库,比如: pcre(支持rewrite),zlib(支持gzip模块)和openssl(支持ssl模块) 等。

编译安装Nginx

官方源码包下载地址:

https://nginx.org/en/download.html
实验环境准备

rhel9.4的虚拟机,网卡eth0 nat模式,ip:172.25.254.100

关闭了selinux和firewalld

#将需要的nginx的压缩包下载下来
[root@Nginx ~]# ll nginx-1.24.0.tar.gz 
-rw-r--r--. 1 root root 1112471 Aug 15 14:08 nginx-1.24.0.tar.gz
#创建一个专供nginx使用的用户
[root@Nginx ~]# useradd -s /sbin/nologin -M nginx
#对其进行解压
[root@Nginx ~]# tar zxf nginx-1.24.0.tar.gz
#再下载学习Nginx所需要的软件包
[root@Nginx ~]# dnf install gcc pcre-devel zlib-devel openssl-devel -y
#进入解压的nginx目录
[root@Nginx ~]# cd nginx-1.24.0/
[root@Nginx nginx-1.24.0]# ll
total 816
drwxr-xr-x. 6 nginx nginx   4096 Aug 15 14:11 auto
-rw-r--r--. 1 nginx nginx 323312 Apr 11  2023 CHANGES
-rw-r--r--. 1 nginx nginx 494234 Apr 11  2023 CHANGES.ru
drwxr-xr-x. 2 nginx nginx    168 Aug 15 14:11 conf
-rwxr-xr-x. 1 nginx nginx   2611 Apr 11  2023 configure
drwxr-xr-x. 4 nginx nginx     72 Aug 15 14:11 contrib
drwxr-xr-x. 2 nginx nginx     40 Aug 15 14:11 html
-rw-r--r--. 1 nginx nginx   1397 Apr 11  2023 LICENSE
drwxr-xr-x. 2 nginx nginx     21 Aug 15 14:11 man
-rw-r--r--. 1 nginx nginx     49 Apr 11  2023 README
drwxr-xr-x. 9 nginx nginx     91 Aug 15 14:11 src
#隐藏版本信息
[root@Nginx nginx-1.24.0]# vim src/core/nginx.h
...
#define nginx_version      1026001
#define NGINX_VERSION      "1.0"
#define NGINX_VER          "lanjinli" NGINX_VERSION
...
#检测安装环境
[root@Nginx nginx-1.24.0]# ./configure --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx \
> --with-http_ssl_module \
> --with-http_v2_module \
> --with-http_realip_module \
> --with-http_stub_status_module \
> --with-http_gzip_static_module \
> --with-pcre \
> --with-stream \
> --with-stream_ssl_module \
> --with-stream_realip_module
#会多出两个文件Makefile,objs
[root@Nginx nginx-1.24.0]# ll
total 820
drwxr-xr-x. 6 nginx nginx   4096 Aug 15 14:11 auto
-rw-r--r--. 1 nginx nginx 323312 Apr 11  2023 CHANGES
-rw-r--r--. 1 nginx nginx 494234 Apr 11  2023 CHANGES.ru
drwxr-xr-x. 2 nginx nginx    168 Aug 15 14:11 conf
-rwxr-xr-x. 1 nginx nginx   2611 Apr 11  2023 configure
drwxr-xr-x. 4 nginx nginx     72 Aug 15 14:11 contrib
drwxr-xr-x. 2 nginx nginx     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值