Nginx
-
Nginx是一个轻量级/高性能的反向代理web服务器,可以做负载均衡,限流。占有内存少,并发能力强,默认端口80 Nginx+Keepalived:双机热备
- 主从模式:一主一备,对外提供一个VIP(虚拟IP,Linux网络配置),主提供服务,备空闲,有问题的时候,切换。
- 双主模式:两台互为主备,每台设置一个VIP,同时工作,一台故障,两台机器的请求转移到另一台上。
-
正向代理:就是客户端代理,服务端不知道实际发起请求的客户端
-
反向代理:就是服务端代理,客户端不知道真实服务器地址,暴漏的是代理的地址
-
动静分离:就是把动态和静态页面让不同的服务器来解析,Ngnix处理静态页面(效率高),反向代理到Tomcat处理动态页面(Ngnix处理动态资源较弱),降低原来单个服务器的压力,加快解析速度。
location / {
#alias D:/DOC/壁纸/;
root D:/DOC/壁纸;
}
-
配置文件 Nginx.conf 组成部分
- 全局块worker_processes: 值越大,可支持的并发量越多,受硬件软件等设备制约
- Events块worker_connections: Nginx服务器与用户的网络连接
- Http块:代理,缓存和日志定义等绝大多数功能和第三方模块的配置
-
原理:Nginx启动后,是由两个进程组成的,一个master和多个worker,过来的请求由master管理,worker去抢这个请求,Nginx同Redis类似,都采用了IO多路复用机制
- CPU 密集型请求:需要 Worker 数与 CPU 内核数量相匹配,减少上下文切换
- IO 密集型请求:加大线程数,让CPU处理更多的请求
-
Nginx虚拟主机配置,在同一台Nginx服务器,运行多个网站的功能
- 基于域名(外部网站)
- 基于端口(公司内部网站)
- 基于IP
-
Nginx负载均衡策略
- 轮询(默认):每个请求按时间顺序分配到不同的服务器,如果服务器down掉,能自动剔除
- Weight(权重): 权重越高被分配的客户端越多
- IP_Hash:每个请求按访问的IP的Hash结果分配,这样每个访客固定访问一个后端服务器
upstream gateway{ ip_hash; # 保证每个用户固定访问一个server,解决session不能跨域问题 server ip地址1 weight 20; server ip地址2 weight 10; } server { listen 800; server_name localhost; # location指令用于匹配url,即根据用户请求的url来执行不同的应用 location / { #location语法规则:=精确匹配,优先级最高;~正则表达式;/:通用匹配,任何请求都匹配 proxy_pass http://gateway; }}
限流:Nginx限流就是保护服务器不会因为承受不住某一时刻的大量并发请求而宕机
- Nginx限流主要分为两种方式:限制访问频率 / 限制并发连接数
- 限制访问频率
# 限制访问频率用limit_req_zone模块,基于漏桶流算法实现的,主要是通过配置文件来实现限流,
比如rate,限制单个IP地址单位时间内可以访问多少次,还可以通过burst来对突发请求做缓存处理,
超过了访问频次的请求放burst,还有nodelay参数允许请求在排队的时候,就是在burst队列里
,就立即被worker处理,通过这两个参数的配合可以降低突发请求的处理时间
http {
limit_req_zone $binary_remote_addr zone=myLimit:10m rate=3r/s;
}
server {
location / {
limit_req zone=myLimit burst=5 nodelay;
rewrite / http://www.xxx.com permanent;
}
}
1.限制并发连接数
# 限制并发连接数,用limit_conn_zone模块,单个IP同时并发多少,整个服务器同时并发,
他不是所有的连接都被计数, 只有当请求的header被服务器处理后,连接才被计数
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.xxx.com permanent;
}
}