当前位置: 首页 > news >正文

初始nginx

华子目录

  • nginx介绍
  • nginx功能介绍
  • 基础特性
  • web服务相关功能
  • `nginx进程结构`
    • `web请求处理机制`
  • `nginx进程间通信`
  • nginx启动与http连接建立
    • http处理过程
  • `nginx模块介绍`
  • nginx命令演示

nginx介绍

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

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

  • nginx其它二次发行版

  • Tengine:由淘宝网发起的Web服务器项目。它在Nginx基础上,针对大访问量网站需求,添加了很多高级功能特性Tengine性能稳定性已经在大型网站淘宝网天猫商城等得到了很好检验。它的最终目标是打造一个高效、稳定、安全、易用Web平台。从2011年12月开始Tengine成为一个开源项目官网: http://tengine.taobao.org/
  • OpenResty:基于NginxLua语言高性能Web平台章亦春团队开发官网:http://openresty.org/cn/

nginx功能介绍

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

基础特性

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

web服务相关功能

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

nginx进程结构

web请求处理机制

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

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

在这里插入图片描述
主进程(master process)的功能

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

工作进程worker process)的功能

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

在这里插入图片描述

nginx进程间通信

  • 工作进程是由主进程生成的,主进程使用fork()函数Nginx服务器启动过程主进程根据配置文件决定启动worker工作进程数量,然后建立一张全局的工作表用于存放当前未退出的所有的workder工作进程主进程生成worker工作进程后会将新生成的worker工作进程加入到worker工作进程表中,并建立一个单向的管道并将其传递给worker工作进程,该管道普通的管道不同,它是由主进程指向工作进程单向通道,包含了主进程工作进程发出的指令、工作进程ID、工作进程在工作进程表中的索引和必要的文件描述符等信息
  • 主进程外界通过信号机制进行通信,当接收需要处理的信号时,它通过管道相关的工作进程发送正确的指令每个工作进程都有能力捕获管道中可读事件,当管道中有可读事件时候工作进程就会从管道中读取并解析指令,然后采取相应的执行动作,这样就完成了主进程工作进程交互
  • worker进程之间的通信原理基本上和主进程worker进程之间通信一样的,只要worker进程之间能够取得彼此的信息,建立管道即可通信,但是由于worker进程之间完全隔离的,因此一个进程想要知道另外一个进程状态信息,就只能通过主进程实现
  • 为了实现worker进程之间交互master进程在生成worker进程之后,在worker进程表中进行遍历,将该新进程的PID以及针对该进程建立的管道句柄传递给worker进程中的其他进程,为worker进程之间通信准备,当worker进程1worker进程2发送指令的时候,首先在master进程给它的其他worker进程工作信息中找到2进程PID,然后将正确的指令写入指向进程2的管道worker进程2捕获到管道中的事件后,解析指令并进行相关操作,这样就完成了worker进程之间的通信
  • 另外worker进程可以通过共享内存通讯,比如upstream中的zone,或者limit_reqlimit_conn中的zone等。操作系统提供了共享内存机制

在这里插入图片描述

nginx启动与http连接建立

在这里插入图片描述

  • Nginx启动时Master进程加载配置文件
  • Master进程初始化监听socket
  • Master进程fork多个Worker进程
  • Worker进程,竞争新的连接获胜方通过三次握手建立Socket连接,并处理请求

http处理过程

在这里插入图片描述

nginx模块介绍

nginx多种模块

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

模块分类:

核心模块:core module
标准模块:
HTTP模块: ngx_http_*
Mail模块: ngx_mail_*
Stream模块:ngx_stream_*
第三方模块

在这里插入图片描述

nginx命令演示

#-v只会列出nginx的版本
[root@nginx-node1 ~]# nginx -v
nginx version: nginx/1.24.0#-V会列出编译时用到的模块和nginx版本
[root@nginx-node1 ~]# nginx -V
nginx version: nginx/1.24.0
built by gcc 11.3.1 20220421 (Red Hat 11.3.1-2) (GCC)
built with OpenSSL 3.0.1 14 Dec 2021
TLS SNI support enabled
configure arguments: --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
#-t检查nginx主配置是否正确
[root@nginx-node1 ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
#优雅停止服务,即所有请求处理完后退出服务
[root@nginx-node1 ~]# nginx -s quit  #强行停止服务
[root@nginx-node1 ~]# nginx -s stop  #重新加载配置文件
#在不关闭nginx的情况下,重新reload加载配置文件后,会回收旧的worker进程,重新起一个新的worker进程,master进程不变
[root@nginx-node1 ~]# nginx -s reload
#-g:开启nginx时,指定全局配置
[root@nginx-node1 ~]# nginx -g "worker_processes 1;"

在这里插入图片描述

[root@nginx-node1 ~]# nginx -s stop
[root@nginx-node1 ~]# nginx -g "worker_processes 6;"
[root@nginx-node1 ~]# ps -axf | grep nginx770 ?        Ss     0:00 avahi-daemon: running [nginx-node1.local]3128 pts/2    S+     0:00  |           \_ grep --color=auto nginx3120 ?        Ss     0:00 nginx: master process nginx -g worker_processes 6;3121 ?        S      0:00  \_ nginx: worker process3122 ?        S      0:00  \_ nginx: worker process3123 ?        S      0:00  \_ nginx: worker process3124 ?        S      0:00  \_ nginx: worker process3125 ?        S      0:00  \_ nginx: worker process3126 ?        S      0:00  \_ nginx: worker process
  • 通过-g参数指定的配置,这个配置一定是配置文件没有的被注释掉的,如果配置文件有这个配置,则会报错

http://www.mrgr.cn/news/82063.html

相关文章:

  • debian系linux安装mysql
  • 二、AI知识(神经网络)
  • 启智云脑Ascend调试平台安装gcc
  • AWS S3文件存储工具类
  • HTML——16.相对路径
  • 记录第一次跑YOLOV8做目标检测
  • 因数据库表被锁死导致服务假死的排查和解决过程
  • 混合合并两个pdf文件
  • vue实现下拉多选、可搜索、全选功能
  • Vue多页面路由与模版解析
  • 自动驾驶新纪元:城区NOA功能如何成为智能驾驶技术的分水岭
  • SpringAI从入门到熟练
  • FreeRTOS Lwip Socket APi TCP Server 1对多
  • 大模型WebUI:Gradio全解系列8——Additional Features:补充特性(上)
  • 小米路由器开启SSH,配置阿里云ddns,开启外网访问SSH和WEB管理界面
  • Isaac Sim Docker 中使用 Python 脚本
  • 一份关于 Ubuntu 系统下代理配置的故障排查笔记
  • Linux高并发服务器开发 第七天(静态库 动态库)
  • LVS 负载均衡原理 | 配置示例
  • Linux高级--3.2.4.2 常见的几种timer的设计方案
  • Java基本操作笔记
  • 协程原理 函数栈 有栈协程
  • 有限元分析学习——Anasys Workbanch第一阶段笔记(2)应力奇异及位移结果对比、初步了解单元的基本知识
  • 大数据组件(一)快速入门调度组件Airflow
  • 人形机器人全身运动规划相关资料与文章
  • PaddleOCROCR关键信息抽取训练过程