第三章nginx详解

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

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

相关推荐
又逢乱世8 小时前
Ubuntu 安装 Nginx
运维·nginx
matrixlzp14 小时前
Nginx yum 安装
nginx
matrixlzp15 小时前
Nginx 使用 Keepalived 搭建 nginx 高可用
运维·nginx
Yang三少喜欢撸铁17 小时前
【阿里云免费领取域名以及ssl证书,通过Nginx反向代理web服务】
nginx·阿里云·代理模式·ssl
Lw老王要学习18 小时前
Linux架构篇、第三章_2_Linux服务器监控与NGINX优化
linux·运维·服务器·nginx·架构·云计算
Yang三少喜欢撸铁2 天前
【彻底卸载nginx并部署nginx1.22.1+ssl模块等】
运维·nginx·ssl
python算法(魔法师版)2 天前
Docker容器启动失败?无法启动?
linux·运维·nginx·docker·容器
UFIT2 天前
Nginx安全防护与HTTPS部署实战
nginx·安全·https
八荒被注册了3 天前
Nginx +Nginx-http-flv-module 推流&拉流
运维·nginx·http
UFIT3 天前
nginx性能优化与深度监控
运维·nginx