Skip to content

为什么用nginx?介绍nginx功能或优点

功能:nginx能做http服务器,反向代理,负载均衡,限流,模块扩展等功能;

性能:使用了epoll事件驱动模型,不用每个请求都创建一个线程或进程,用非阻塞I/O来管理多个连接;当连接准备好或写入时,epoll通知nginx,然后处理这个连接;

nginx epoll 模型

epoll是nginx默认的事件驱动模型,不需要每个请求都创建进程或线程; 用非阻塞I/O来管理多个连接;当连接准备号或准备写入时,epoll通知nginx,然后开始处理;

nginx
events
{
use epoll;#用了epoll事件驱动模型
worker_connections 51200;#每worker进程可打开最大连接数
multi_accept on; #是否应该尝试接受尽可能多的连接
}

nginx的异步非阻塞是怎么实现的?或者说I/O多路复用了解吗?

nginx使用了epoll的事件驱动,当ngxin使用epoll时,会创个epoll对象,将需监听的文件描述符注册到该对象中; 然后nginx会调用epoll_wait等待事件的发生,一旦事件发生,就通知nginx并做出处理

nginx的内存分配了解吗?或者说进程的内存划分了解吗?

Nginx 进程管理?如何分配进程?

accept_mutex ngx_accept_disabled

nginx和php如何通信?

负载均衡的策略(调度算法)有哪些?

1.轮询(Round Robin):适用于后端服务器性能相近,没有特殊需求的情况。

2.加权轮询(Weighted Round Robin)(weight):适用于后端服务器性能不均衡的情况,可以根据服务器的性能设置不同的权重值,以实现负载均衡。

3.随机:适用于简单的负载均衡需求,对后端服务器没有特别的要求。

4.按响应时长(Least Response Time)(fair,第三方插件):适用于需要将请求发送到响应时间最短的服务器,以提高系统性能和响应速度。

5.url_hash(第三方,需要插件) :(按服务来划分?)适用于需要将同一URL的请求发送到同一台服务器,常用于缓存或会话保持等场景。

6.ip_hash(IP Hash) :(按地区划分?)适用于需要将同一客户端IP地址的请求发送到同一台服务器,以保持会话或其他需要依赖客户端IP的需求。

7.最少连接数(Least Connections)(less_conn):(哪个连击小用那个,减缓压力)适用于需要将请求发送到当前连接数最少的服务器,以实现负载均衡和避免某些服务器过载的情况。

nginx比较常用的配置?

配置站点的 
Server
 listen 
Host
Location 正在匹配uri 
root 设置更目录
Index 设置 主页
Rewrite重写
Gzip 压缩
防盗链
禁止访问目录
反向代理
负载均衡
限流
重定向
伪静态
Ssl设置

nginx有哪些优化项?

client:颗like

使用epoll
静态的文件启用缓存
Timeout设置
防盗链
禁止恶意解析域名
隐藏版本信息

worker_process auto 处理进程,auto表示自动,数字表示进程数
worker_connections 51200 最大并发链接数
keepalive_timeout 60 连接超时时间
gzip 开启 是否开启压缩传输
gzip_min_length 1 KB,最小压缩文件
gzip_comp_level 2 压缩率
client_max_body_size 50 MB,最大上传文件
server_names_hash_bucket_size 512 服务器名字的hash表大小
client_header_buffer_size 32 KB,客户端请求头buffer大小
client_body_buffer_size 512 KB,请求主体缓冲区

Nginx限流

nginx
# 限制每个IP地址的最大并发连接数为10
limit conn mylimit 10; 
# 客户端地址($binary_remote_addr),最大连接数为10(mylimit),速率每秒最多10从
limit conn_zone $binary_remote_addr zone=mylimit:10m rate=10r/s


# 定义名为 myreqlimit 的共享内存区域,大小为 10MB,并设置请求速率为每秒 10 个请求  
limit_req_zone $binary_remote_addr zone=myreqlimit:10m rate=10r/s; 
# 限制每个IP地址的请求频率,并设置突发队列大小为20
limit_req zone=myreqlimit burst=20;
limit_rate 512k  #每个连接最大512KB/秒

分析nginx日志,海量数据里面找出访问次数排名前十的 IP

cat access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -n 10

ngnix 的惊群现象,怎么解决的?

参考

fork 后的进程通过 accept 和 epoll_wait 等待终端的链接

epoll_wait: 通过 标志标识,一次只唤醒一个进程

accept: 每个进程轮流监听 socket,在超时时间内未获得连接,则换一下个

Nginx高级课程扩容与高效

keepalived是什么?keepalived高可用故障转移原理是什么?

alived:读a like
keepalived最初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了实现高可用的VRRP功能。keepalived除了能够管理LVS软件外,还能支持其他服务的高可用解决方案。
keepalived通过VRRP协议实现高可用功能的。VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议。VRRP出现的目的就是为了解决静态路由单点故障问题,它能保证当个别节点宕机时,整个网络可以不间断地运行。
keepalived高可用服务之间的故障转移,是通过VRRP来实现的。在keepalived服务工作时,主Master节点会不断地向备节点发送(多播的方式)心跳消息,用来告诉备Backup节点自己还活着。

当主节点发生故障时,无法给备节点发送心跳消息,如果备节点无法继续检测到来自主节点的心跳。就会调用自身的接管程序,接管主节点的IP资源和服务。当主节点恢复时,备节点又会释放主节点故障时自身接管的IP资源和服务,恢复到原来的备用角色。