Nginx问题汇总

为什么Nginx性能这么高?

  • 主要是因为他的事件处理机制:异步非阻塞事件处理机制(事件驱动的异步模型):运用了epoll模型,Nginx 会创建一些事件对象,然后将这些事件对象注册到事件驱动器中。当事件发生时,事件驱动器会通知 Nginx 处理该事件,从而实现异步处理用户请求的目的。
  • 同时提供了一个事件队列队列,逐个处理队列中的事件。这种方式可以确保 Nginx 能够高效地处理大量的连接请求,同时保持较低的系统负载。
  • 某个 I/O 事件阻塞了,那么它不会影响其他 I/O 事件的处理,因为 Nginx 是基于事件驱动的模型,可以同时处理多个事件。当某个 I/O 事件被阻塞时,Nginx 会将该事件从 epoll 监听队列中移除,并将其放入一个新的队列中,等待下一次 epoll 监听到该事件的可用状态时再次处理。这种方式可以确保 Nginx 在高并发场景下保持稳定性和可靠性。

什么是正向代理和反向代理?

  1. 正向代理代理的是客户端,客户端发送请求会指定服务端地址和端口,nginx收到请求,会将数据直接发送到目标的服务器,收到响应后,nginx在返回给客户端。正向代理可以隐藏实际的客户端,对于服务器来说,nginx就是客户端。
  2. 反方代理代理的是服务端,客户端发送的请求(不用指定服务端地址和端口)统一被Nginx接收,nginx反向代理服务器接收到之后,**按照一定的规则(负载均衡)**分发给了后端的业务处理服务器进行处理了,nginx收到后端服务器的响应之后,再发回给客户端。反向代理可以做负载均衡,同时也可以隐藏源服务器的存在和特征,比较安全。

Nginx怎么处理请求的?

  • worker进程收到请求后,首先会解析请求内容,如果是一个简单的get请求,比如请求80端口,首先后访问nginx配置文件,首先由listen和server_name指令匹配server模块,再匹配server模块里的location,location就是实际地址
server {            		    	# 第一个Server区块开始,表示一个独立的虚拟主机站点listen       80;      		        # 提供服务的端口,默认80server_name  localhost;    		# 提供服务的域名主机名location / {            	        # 第一个location区块开始root   html;       		# 站点的根目录,相当于Nginx的安装目录index  index.html index.htm;    	# 默认的首页文件,多个用空格分开}          				# 第一个location区块结果
}

location的作用是什么?

  • location指令的作用是根据用户请求的URI来执行不同的应用,也就是根据用户请求的网站URL进行匹配,匹配成功即进行相关的操作。

nginx限流

  1. 限制访问频率

Nginx中使用ngx_http_limit_req_module模块来限制的访问频率

#定义限流维度,一个用户一分钟一个请求进来,多余的全部漏掉limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m;#绑定限流维度server{location/seckill.html{limit_req zone=zone;	proxy_pass http://lj_seckill;}}

1r/s代表1秒一个请求,1r/m一分钟接收一个请求, 如果Nginx这时还有别人的请求没有处理完,Nginx就会拒绝处理该用户请求。

  1. 或者限制突发流量
location/seckill.html{limit_req zone=zone burst=5 nodelay;proxy_pass http://lj_seckill;}

多了一个 burst=5 nodelay; 多了这个可以代表Nginx对于一个用户的请求会立即处理前五个,多余的就慢慢来落,没有其他用户的请求我就处理你的,有其他的请求的话我Nginx就漏掉不接受你的请求

  1. 限制并发连接数

Nginx中的ngx_http_limit_conn_module模块提供了限制并发连接数的功能

http {limit_conn_zone $binary_remote_addr zone=myip:10m;limit_conn_zone $server_name zone=myServerName:10m;}server {location / {limit_conn myip 10;limit_conn myServerName 100;rewrite / http://www.lijie.net permanent;}}

上面配置了单个IP同时并发连接数最多只能10个连接,并且设置了整个虚拟服务器同时最大并发数最多只能100个链接。当然,只有当请求的header被服务器处理后,虚拟服务器的连接数才会计数。

这些限流算法都是基于漏桶算法原理实现的。

漏桶流算法和令牌桶算法

漏桶算法:突发流量会进入到一个漏桶,漏桶会按照我们定义的速率依次处理请求,如果水流过大也就是突发流量过大就会直接溢出,则多余的请求会被拒绝。所以漏桶算法能控制数据的传输速率。

令牌桶算法的机制如下:存在一个大小固定的令牌桶,会以恒定的速率源源不断产生令牌。如果令牌消耗速率小于生产令牌的速度,令牌就会一直产生直至装满整个令牌桶。

Nginx负载均衡

• 为了避免服务器崩溃,大家会通过负载均衡的方式来分担服务器压力。将对台服务器组成一个集群,当用户访问时,先访问到一个转发服务器,再由转发服务器将访问分发到压力更小的服务器。

均衡算法:

  • 轮询
  • 权重
  • ip_hash:每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题
  • **url_hash:**按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。

Nginx为什么不使用多线程?

Nginx:

采用单线程来异步非阻塞处理请求(管理员可以配置Nginx主进程的工作进程的数量),不会为每个请求分配cpu和内存资源,节省了大量资源,同时也减少了大量的CPU的上下文切换,所以才使得Nginx支持更高的并发。

nginx模块 handler模块,filter过滤器模块,upstream模块;

handler模块是客户端访问nginx,nginx接收到请求时就开始处理,接着返回

filter过滤器模块是后端发给nginx,nginx发送给前端的,后端数据到达nginx这,filter可以对响应头和响应体进行修改,在response基础上加入一些东西

upstream模式是nginx转发给后端的模块,比如fastcgi模块。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1487.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

串口wifi6+蓝牙二合一系列模块选型参考和外围电路参考设计-WG236/WG237

针对物联网数据传输,智能控制等应用场景研发推出的高集成小尺寸串口WiFi串口蓝牙的二合一组合模块。WiFi符合802.11a/b/g/n无线标准,蓝牙支持低功耗蓝牙V4.2/V5.0 BLE/V2.1和EDR,WiFi部分的接口是UART,蓝牙部分是UART/PCM 接口。模…

3Ds max图文教程:高精度篮球3D建模

推荐: NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 第 1 步。使用以下设置在顶部视口上创建球体: 第 2 步。将球体转换为可编辑的多边形: 第 3 步。转到 Edge 子对象级别并剪切以下边缘: 第 4 步。选择以下边,然…

什么是 Elasticsearch 索引?

作者:David Brimley 索引这个术语在科技界已经被用满了。 如果你问大多数开发人员什么是索引,他们可能会告诉你索引通常指的是关系数据库 (RDBMS) 中与表关联的数据结构,它提高了数据检索操作的速度。 但什么是 Elasticsearch 索引&#xff…

自然语言处理从入门到应用——LangChain:代理(Agents)-[自定义MRKL代理]

分类目录:《自然语言处理从入门到应用》总目录 本文将介绍如何创建自己的自定义MRKL Agent。MRKL Agent由三个部分组成: 工具:代理可用的工具。LLMChain:生成以一定方式解析的文本,以确定要采取哪个动作。代理类本身&…

目标检测YOLO实战应用案例100讲-基于深度学习的雾天交通图像车辆及行人目标检测研究

目录 前言 图像去雾算法 目标检测算法 相关理论及图像去雾实验

k8s-rancher应用

Rancher 管理 Kubernetes 集群 //Rancher 简介 Rancher 是一个开源的企业级多集群 Kubernetes 管理平台,实现了 Kubernetes 集群在混合云本地数据中心的集中部署与管理, 以确保集群的安全性,加速企业数字化转型。超过 40000 家企业每天使用 …

Stable Diffusion配置要求,显卡推荐

Stable Diffusion 是一款流行的人工智能图像生成器,您可以在自己的 PC 上运行。但是运行Stable Diffusion的最低规格是多少,哪些组件最重要? Stable Diffusion需要什么 PC 硬件? Stable Diffusion最关键的一个组件是显卡 (GPU)。…

基于scrcpy的Android群控项目重构,获取Android屏幕元素信息并编写自动化事件

系列文章目录 基于scrcpy的远程调试方案 基于scrcpy的Android群控项目重构 基于scrcpy的Android群控项目重构 进阶版 基于scrcpy的Android群控项目重构,获取Android屏幕元素信息并编写自动化事件(视频) 基于scrcpy的Android群控项目重构…

大数据技术笔试题库--带答案

一、单选: 1、下列选项中,执行哪一个命令查看Linux系统的IP配置。A A、ipconfig B、find C、ifconfig D、arp -a 2、在MapReduce程序中,map()函数接收的数据格式是(D)。 A、字符串 B、整型 C、Long D、键值对 3、下列选…

全国节能宣传周丨物通博联智慧能源解决方案助力节能降碳

今年7月10日至16日,为全国第33个节能宣传周。今年全国节能宣传周活动主题是“节能降碳,你我同行”。 全国节能宣传周活动是在1990年国务院第六次节能办公会议上确定的活动周,开展该活动是实施全面节约战略、开展节能降碳宣传教育、推动形成绿…

Vue3组件间的通信方式

目录 1.props父向子组件通信 2.自定义事件 子向父组件通信 3.全局事件总线 4.v-model组件通信(父子组件数据同步) 绑定单个数据同步 绑定多个数据同步 5.useAttrs组件通信 6.ref与$parent ref获取子组件实例对象 $parent获取父组件实例对象 7.p…

postgresql内核分析 spinlock与lwlock原理与实现机制

​专栏内容: postgresql内核源码分析 手写数据库toadb 并发编程 个人主页:我的主页 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 概述 在postgresql 中,有大量的并发同步&#xff0…

260道网络安全工程师面试题汇总(附答题解析+配套资料)

由于我之前写了不少网络安全技术相关的文章和回答,不少读者朋友知道我是从事网络安全相关的工作,于是经常有人私信问我: 我刚入门网络安全,该怎么学? 想找网络安全工作,应该要怎么进行技术面试准备&…

Oracle删除约束条件不会锁表

最近有个需求要删除一个Oracle约束条件,但是由于不知道会不会锁表,所以测试了一下 使用python写了段代码验证下 import cx_Oracle conn cx_Oracle.connect(dba_li/oracle192.168.56.105:1521/orcl) #用自己的实际数据库用户名、密码、主机ip地址 替…

通过rebase,解决gitlab提示的pipeline failed

之前提交的MQ,提示Pipeline failed: gitlab提交MQ提示Pipeline failed的解决办法_pipeline:failed_柳鲲鹏的博客-CSDN博客 又报错,给的提示: 本以为万事大吉。结果发现自己的库也提示有问题。按照上文的办法修改之后还是不对。…

Java设计模式-责任链(Chain of Responsibility)模式

介绍 Java责任链(Chain of Responsibility)设计模式是指很多处理对象构成一个链,链中前一个对象指向后一个对象。请求在链中传递,一个请求可以被一个或者多个对象处理。调用方(即客户端)不知道请求会被链中…

【C++】C++11 (3): lambda表达式和包装器

一、lambda表达式 C98中的一个例子 在C98中&#xff0c;如果想要对一个数据集合中的元素进行排序&#xff0c;可以使用std::sort方法。 #include <algorithm> #include <functional> int main() {int a[] { 4,1,8,5,3,7,0,9,2,6 };// 默认按照小于比较&#xff…

JS、Vue鼠标拖拽

JS代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevic…

每日打卡day8——差分练习

输入一个长度为 n 的整数序列。 接下来输入 m 个操作&#xff0c;每个操作包含三个整数 l,r,c&#xff0c;表示将序列中 [l,r] 之间的每个数加上 c。 请你输出进行完所有操作后的序列。 输入格式 第一行包含两个整数 n 和 m。 第二行包含 n 个整数&#xff0c;表示整数序列…

Go和Java实现观察者模式

Go和Java实现观察者模式 在监控系统中&#xff0c;我们需要采集监控指标的信息&#xff0c;假设当采集的指标信息超过阈值时我们需要对该监控指标持久化到 数据库中并且进行告警。 本文通过指标采集持久化和告警来说明观察者模式的使用&#xff0c;使用Go语言和Java语言实现…