第三章nginx详解

news2024/11/23 22:17:59

nginx:高性能,轻量级的web服务软件。

特点:

1,稳定性高。(没有apache稳定)

2,系统资源消耗地较低。(处理http请求的并发能力非常高,单台物理服务器可以处理30000-50000个并发请求)

稳定:一般在企业中,为了保持服务器的稳定,并发量的设置在20000个左右。占用内存2M左右。

nginx主要功能:

1,静态文件服务:nginx可以直接提供静态文件的服务,HTML,CSS,JAVAScript,图片等。能够高效的处理并且响应静态文件的请求。
2,反向代理:可以作为一个反向代理的服务器,然后将客户端的请求转发给后端多个服务器,可以实现负载均衡,高可用。提高整个集群的性能以及可靠性

反向代理的核心:客户端在请求时,通过代理服务器,会把请求的流量按照轮询算法,转发到后台不同的服务器,实现负载均衡和高可用

3,处理动态内容,nginx处理动态内容很差,nginx可以代理请求,发送到后端的动态服务处理,动态服务器处理完之后,nginx把动态请求,响应给客户端。

4,SSL/TLS 加密,HTTPS的加密方式,数字证书验证机制。

5,虚拟主机:nginx可以在一台服务器上设置多个虚拟主机,同一个服务器上可以有多个域名和站点。

6,URL重定向功能,可以实现灵活的url重写和重定向。

7,缓存功能,nginx自带缓存功能

8,日志功能,可以详细的记录请求的信息,包括访问的时间,请求路径,ip地址,响应状态,有助于故障排查。(系统控制的日志,记录在/var/log/messages,自己的业务日志:access.log error.log access记录的谁访问的我,都是访问成功的记录,error日志:也记录谁访问我,但是记录的是失败访问记录)

nginx的主要应用场景:

1,静态服务

2,反向代理,负载均衡

3,缓存服务

4,动态服务

nginx命令:

-t:检查配置文件是否正确
-v:查看nginx的版本号

-s (stop,start):向主进程传输信号,停止,开启,重启,重新加载

-c:设置配置文件的默认路径

-V:当前nginx所有模块组

信号符:

信号符结合kill使用:只要是kill,只能跟pid号

kill-USR1 + nginx服务的pid号 :日志分割

kill -s HUP + nginx服务的pid号 :重新加载

kill -s HUP nginx :可以跟服务名,也可以用pid号

kill -s QUIT + nginx服务的pid号 :优雅推出,有人访问时不会就结束进程,访问结束才会结束进程。

kill -s WINCH + nginx服务的pid号 :优雅的结束worker,知道请求完成,才会结束worker的进程。

location模块当中:

root:拼接模式,root指定的目录和 location 之间做的一个拼接,/opt/ky30/ 这两个路径都是真实存在,而且都是目录,并且在uri目录里面要有web文件。

alias:匹配指定路径下的web文件

/ root后面有没有 / 无所谓,加不加都可以,alias加了 / ,后面也必须有 / ,否则匹配不到

root 标签可以使用重定向

alias 不可以设置重定向。

总结:

1,全局快,全局生效,所有模块,所有用户都生效。

2,events:一个像nginx服务器和用户的网络连接问题。

3,http:只要模块,配置代理,缓存,虚拟主机,方向代理,只能是http的请求才可以写http模块中。

)1,upstream:反向代理指定服务器的命令,七层,基于ip和端口,走http协议,只能在http模块中。

4,serber块:包含在http模块中,不能单独设置。

5,location:匹配uri,包含在sever当中的,也不能单独设置。

)1,porxy_pass:反向代理

6,strean块:四层,·12345678走的是tcp或者udp流量,并不能卸载http当中,要写在全局配置中。

访问状态统计:

基于用户名和密码的访问控制

基于ip地址的访问规则

nginx的优化和防盗链

重点是优化:

1,隐藏版本号:

方法一:修改配置文件

在http模块中,加入一个命令:

server_tokens off;

方法二:在源码包里改

/opt/nginx-1.22.0/src/core/nginx.h #define NGINX_VERSION "1.1.1" #修改版本号 #define NGINX_VER "burun/" NGINX_VERSION

要配置好之后,重新编译安装

serve_tokens on

nginx的日志分割:

代码:

#!/bin/bash #获取日期 d=$(date +%Y-%m-%d) #定义存储目录 dir="/usr/local/nginx/logs"

#分割日志 logs_file="/usr/local/nginx/logs/access.log" logs_error='/usr/local/nginx/logs/error.log'

#定义nginx的pid文件 pid_file='/usr/local/nginx/run/nginx.pid'

if [ ! -d "$dir" ] then mkdir -p $dir fi

#移动日志并且重命名

mv $logs_file ${dir}/access_${d}.log

mv $logs_error ${dir}/error_${d}.log

#发送信号给nginx主程序,让他生成一个新的日志文件

kill -USR1 $(cat ${pid_file}) #cat /usr/local/nginx/run/nginx.pid

#日志文件清理的命令 find ${dir} -mtime +30 -exec rm -rf {} \;

nginx的页面压缩

作用:节约带宽,提升用户的访问速度

gzip on; #取消注释,开启gzip的压缩功能 gzip_min_length 1k; #最小压缩文件的大小 gzip_buffers 4 64k; #压缩缓冲区,大小为4个64K缓冲区,Nginx 会使用 4 个 64KB 大小的缓冲区来存储压缩后的数据。 gzip_http_version 1.1; #压缩版本,默认为1.1 gzip_comp_level 6; #压缩比率(压缩等级为1-9,6是中等等级,也是常用等级)Gzip 压缩级别的范围是 1 到 9, 其中 1 表示压缩速度最快,但压缩比最低,9 表示压缩速度最慢,但压缩比最高。默认值为 1。 gzip_vary on; #支持前端缓存服务器支持压缩页面 gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss image/jpg image/jpeg image/png image/gif application/x-httpd-php application/javascript application/json; #压缩的类型,哪些文档启用压缩功能

压缩的功能是自带的,可以不取消注释,但是需要添加压缩细节,需要把gzip打开后,进行配置

图片缓存:

连接超时:

http1.1,会有一个keepalive模式,告诉web服务器在处理玩一个请求之后把保持当前连接的tcp的状态为打开状态,如果当前连接有新的请求,服务端就会利用这个没有关闭的连接,继续给客户端响应,不需要在建立一个新的连接

keep alive在一段时间

nginx的并发配置:

在高并发的场景中,需要启动更多的nginx进程以保证响应速度。可以更快的处理用户的请求,避免阻塞

1,cpu的核心数来进行设置

2,/worker_cpu_affinity 设置work进程绑定到指定的cpu的命令。可以减少cpu切换带来的开销,确保worker进程在一个独立的cpu核心上运行。

TIME_WAIT:

不是一个报错信息,是tcp连接状态中的一种状态,出现在tcp连接的四次挥手中

fin=1

ack=1

当连接的乙方发送fin报文,而且收到了对方的ack保温之后,就会进入time_wait tcp处理等待的状态,是一个持续时间,65秒,确保网络中的所有数据包都被完全处理完毕。

两个作用:

1,确保可靠的关闭连接。如果立刻关闭连接,旧的数据包也会被处理,从而会干扰新的连接

2,避免连接服用,time_wait的时间太短了,可能会导致九的链接仍然在网络中,会被误认为是新的连接,导致连接复用。

而且在连接的生命周期,time_wait占用的资源是非常小的,而且对服务器整体的影响也很有限。

大量的短链接频繁创造和销毁,或者大并发连接时(负载均衡),time_wat连接会积累,服务器会出现大量的time_wait状态的链接,在这种状况下需要优化处理。

内核设置,进行优化。

查看系统的所有tcp连接的状态

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

closed 表示连接未活动或者关闭

listen 监听,等待连接

syn_recv :syn接受,服务端收到了来自客户端的syn(连接请求),正在等待确认

syn_sent :syn发送,客户端已经向服务器发送了syn请求,等待服务器确认

ESTABLELISHED:已经建立了tcp连接,正在传送数据

fin_wait1 :表示一端已经发送了连接关闭的请求,等待另一端确认

fin_wait2:表示一段已经关闭连接,但是应用程序还未关闭连接

close_wait:表示一段已经关闭连接,但是应用程序还欸关闭连接

closing:正在关闭

time_wait:连接等待

last_ack:表示应用程序已经发送了最后确认,等待另一端进入closed状态

valid_refers 设置信任网站, *.kgc.com kgc.com 都可以访问图片

none:允许没有http_refer的请求访问资源

www.kgj.com/ls.jpg

www.kgc.com也可以访问显示图片。

 

面试题:

nginx是如何实现高并发的?

1,nginx自身代码的问题,大量的底层代码进行了优化,同时自带了一个功能模块。epoll模块,自带的,支持高并发。‘

2,nginx也是一个master进程控制多个work进程。master负责收集和分发请求,work是实际的执行者。每一个请求进来时,mester就会拉起一个work进程来处理请求。同时master进程也负责监控work的状态,work的数量要和cpu的数量一致或者两倍。work处理请求只受内存大小的限制,所以可以处理多个请求,再加上nginx本身就是轻量级的服务,处理请求时占用的内存本身就少,所以可以实现大并发处理。

如何修改Linux服务器文件的最大打开数量?

ulimit -n 65535 零时修改 Linux只支持打开65535

vim /etc/security/limits.conf

*soft nproc 65535

*hard nproc 65535

*soft nofile 65535

*hard nofile 65535

底行输入,必须重启才能生效

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

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

相关文章

【漏洞通知】JeecgBoot 修复 Freemarker 模板注入漏洞, 漏洞危害等级:高危

Freemarker模板注入导致远程命令执行, 远程攻击者可利用该漏洞调用在系统上执行任意命令。 JeecgBoot官方已修复,建议大家尽快升级至相关底层依赖和源码 一、漏洞描述 Freemarker模板注入导致远程命令执行, 远程攻击者可利用该漏洞调用在系统上执行任意命令。漏洞…

神经网络基础-神经网络补充概念-14-逻辑回归中损失函数的解释

概念 逻辑回归损失函数是用来衡量逻辑回归模型预测与实际观测之间差异的函数。它的目标是找到一组模型参数,使得预测结果尽可能接近实际观测。 理解 在逻辑回归中,常用的损失函数是对数似然损失(Log-Likelihood Loss)&#xff…

流程挖掘in汽车丨宝马的流程效能提升实例

汽车行业在未来10年里,可能会面临比过去50年更多的变化。电动化、智能化、共享化和自动驾驶等方面的趋势可能给企业流程带来以下挑战: 供应链管理-电动化和智能化的发展可能导致供应链中的零部件和系统结构发生变化,企业需要重新评估和优化供…

【Linux】IO多路转接——epoll

目录 epoll初识 epoll的相关系统调用 epoll工作原理 epoll服务器 epoll的优点 epoll工作方式 对比LT和ET epoll初识 epoll也是系统提供的一个多路转接接口。 epoll系统调用也可以让我们的程序同时监视多个文件描述符上的事件是否就绪,与select和poll的定位是…

torch_geometric实现GCN和LightGCN

torch_geometric实现GCN和LightGCN 题记demo示意图GCN代码LightGCN代码参考博文及感谢 题记 使用torch_geometric实现GCN和LightGCN,以后可能要用,做一下备份 demo示意图 GCN代码 X ′ D ^ − 1 / 2 A ^ D ^ − 1 / 2 X Θ \mathbf{X}^{\prime} \mat…

Linux 僵死进程

fork复制进程之后,会产生一个进程叫做子进程,被复制的进程就是父进程。不管父进程先结束,还是子进程先结束,对另外一个进程完全没有影响,父进程和子进程是两个不同的进程。 一、孤儿进程 现在有以下代码:…

【Vue-Router】路由元信息

路由元信息(Route Meta Information)是在路由配置中为每个路由定义的一组自定义数据。这些数据可以包含任何你希望在路由中传递和使用的信息,比如权限、页面标题、布局设置等。Vue Router 允许你在路由配置中定义元信息,然后在组件…

国产32位单片机XL32F001,带1 路 12bit ADC,I2C、SPI、USART 等外设

XL32F001 系列单片机采用高性能的 32 位 ARM Cortex-M0内核,宽电压工作范围的 MCU。嵌入 24KbytesFlash 和 3Kbytes SRAM 存储器,最高工作频率 24MHz。包含多种不同封装类型多款产品。芯片集成 I2C、SPI、USART 等通讯外设,1 路 12bit ADC&am…

【校招VIP】测试方案之测试用例分析

考点介绍 测试用例是测试岗面试和工作后的核心,在面试里对测试用例的分析是高频考查点。但是很多同学因为没有真实的商业产品需求,只能简单的看别人的用例学习,导致面试时被一个陌生问题卡住。 比如最简单的用户名密码输入,在商业…

2023年网络安全比赛--综合渗透测试(超详细)

一、竞赛时间 180分钟 共计3小时 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 1.扫描目标靶机将靶机开放的所有端口,当作flag提交(例:21,22,23); 2.扫描目标靶机将靶机的http服务版本信息当作flag提交(例:apache 2.3.4); 3.靶机网站存在目录遍历漏洞,请将…

数据库--SQL关键字的执行顺序

一条sql语句通常包括: select from join where group by having order by 聚合函数 limit top 浅谈执行顺序: 1)、首先确定一点,并不是按照我们写的语句顺序,从左—>右执行的 2)、…

JVM——分代收集理论和垃圾回收算法

一、分代收集理论 1、三个假说 弱分代假说:绝大多数对象都是朝生夕灭的。 强分代假说:熬过越多次垃圾收集过程的对象越难以消亡。 这两个分代假说共同奠定了多款常用的垃圾收集器的一致的设计原则:收集器应该将Java堆划分出不同的区域&…

R语言实现免疫浸润分析(1)

免疫浸润分析是生物信息学研究中的一项关键内容,它旨在评估肿瘤微环境中不同类型的免疫细胞组成。免疫细胞在肿瘤发展和治疗中起着至关重要的作用,因为它们可以影响肿瘤的生长、扩散和对治疗的响应。 为了了解免疫细胞在肿瘤中的分布和数量,…

【潮州饶平】联想 IBM x3850 x6 io主板故障 服务器维修

哈喽 最近比较忙也好久没有更新服务器维修案例了,这次分享一例潮州市饶平县某企业工厂一台IBM System x3850 x6服务器亮黄灯告警且无法正常开机的服务器故障问题。潮州饶平ibm服务器维修IO主板故障问题 故障如下图所示: 故障服务器型号:IBM 或…

客达天下项目案例

本资料转载于传智播客https://www.itheima.com/ https://space.bilibili.com/3493265607232348 黑马程序员主办的全日制统招大学——大同互联网职业技术学院 预计2024年开始招生,敬请持续关注! B站视频入口:002_接口项目介绍_哔哩哔哩_bili…

互联网发展历程:从布线到无线,AC/AP的崭新时代

互联网的发展,一直在追求更便捷、更灵活的连接方式。在网络的早期,布线问题常常让人头疼。一项革命性的技术应运而生,那就是“无线AC/AP”。 布线问题的烦恼:繁琐的布线 早期网络的布线工作常常耗费时间和精力,尤其在大…

随机森林:人类基因组中病毒片段识别

百万年前人类基因组中基因组中就已经嵌入了病毒序列,其中一部分在某些条件下会致病,通过基因测序获得海量片段之后就可以判断正常基因和病毒序列了。 我们根据这种包含众多碱基的基因测序结果从中选取部分特征,关于特征的选取也是有好有坏的…

剑指offer62.圆圈中最后剩下的数字

这道题在算法课上的一个小故事上有一个类似的,就是一个军官打了败仗,带着他的几个兵逃到一个山洞,他们不想当俘虏想自杀,但是军官不想自杀但是又不好意思走,于是军官想了个办法,他们几个人围成一个圈&#…

数据库的新工具datagrip

datagrip的安装(一路next即可) 首先,双击datagrip安装包,会出现下面的界面,然后直接点击next 继续点击next 选中tatagrip,然后在点击next 点击install 勾选datagrip,然后在点击finish 直接点击…

【面试题】JavaScript高级四、高阶技巧

JavaScript高级四、高阶技巧 1、深浅拷贝 首先浅拷贝和深拷贝只针对引用类型 (1)浅拷贝 浅拷贝:拷贝对象的属性的值(简单类型存的值就是值本身,引用类型存的值是对象的堆地址),所以如果拷贝的…