nginx复盘笔记
配置解析:
说明:配置文件中的内容包含三部分内容;
- 全局块:配置服务器整体运行的配置指令比如 worker_processes 1;处理并发数的配置。
- events 块:影响 Nginx 服务器与用户的网络连接比如worker_connections 1024; 支持的最大连接数为 1024;
- 还包含两部分:http 全局块和server 块
一:反向代理
server {
listen 81;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://localhost:8080;
}
}
说明:服务监听81端口,有收到访问81的请求后,将请求转发到8080端口上。
二:动静分离
说明:通过 location 指定不同的后缀名实现不同的请求转发。
注意:location中root与alias的区别
root与alias主要区别在于nginx如何解释location后面的uri,这会使两者分别以不同的方式将请求映射到服务器文件上。
root实例:
location ^~ /t/ { root /www/root/html/; }
如果一个请求的URI是/t/a.html时,web服务器将会返回服务器上的/www/root/html/t/a.html的文件。
alias实例
location ^~ /t/ { alias /www/root/html/new_t/; }
如果一个请求的URI是/t/a.html时,web服务器将会返回服务器上的/www/root/html/new_t/a.html的文件。注意这里是new_t,因为alias会把location后面配置的路径丢弃掉,把当前匹配到的目录指向到指定的目录。
三:负载均衡
- 负载均衡用于从“upstream”模块定义的后端服务器列表中选取一台服务器接受用户的请求。
upstream tomcat{
server localhost:8080;
server localhost:8082;
}
- 在upstream模块配置完成后,要让指定的访问反向代理到服务器列表:
server {
listen 83;
server_name tomcat82;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://tomcat;
}
}
说明:监听83端口,当访问请求过来时,负载到本机的8080/8082中去。
负载策略:
第一种 轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除;此策略适合服务器配置相当,无状态且短平快的服务使用。
参数列表如下:
fail_timeout 与max_fails结合使用。 max_fails 设置在fail_timeout参数设置的时间内最大失败次数,如果在这个时间内,所有针对该服务器的请求都失败了,那么认为该服务器会被认为是停机了, fail_time 服务器会被认为停机的时间长度,默认为10s。 backup 标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里。 down 标记服务器永久停机了。 第二种 weight:weight 代表权重默认为 1,权重越高被分配的客户端越多,此策略比较适合服务器的硬件配置差别比较大的情况。
#动态服务器组 upstream dynamic_zuoyu { server localhost:8080 weight=2; #tomcat 7.0 server localhost:8081; #tomcat 8.0 server localhost:8082 backup; #tomcat 8.5 server localhost:8083 max_fails=3 fail_timeout=20s; #tomcat 9.0 }
说明:在该例子中,weight参数用于指定轮询几率,weight的默认值为1,;weight的数值与访问比率成正比,比如Tomcat 7.0被访问的几率为其他服务器的两倍。
第三种 ip_hash:每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器;
#动态服务器组 upstream dynamic_zuoyu { ip_hash; #保证每个访客固定访问一个后端服务器 server localhost:8080 weight=2; #tomcat 7.0 server localhost:8081; #tomcat 8.0 server localhost:8082; #tomcat 8.5 server localhost:8083 max_fails=3 fail_timeout=20s; #tomcat 9.0 }
第四种:least_conn:把请求转发给连接数较少的后端服务器;least_conn这种方式就可以达到更好的负载均衡效果。
#动态服务器组 upstream dynamic_zuoyu { least_conn; #把请求转发给连接数较少的后端服务器 server localhost:8080 weight=2; #tomcat 7.0 server localhost:8081; #tomcat 8.0 server localhost:8082 backup; #tomcat 8.5 server localhost:8083 max_fails=3 fail_timeout=20s; #tomcat 9.0 }
说明:轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。
四:高可用配置
在高并发情况下,采用nginx作为代理服务器,为了防止Nginx挂掉导致整个所有服务节点无法访问,可以考虑使用Keepalived+Nginx集群实现高可用。
Keepalived 介绍:
是一种高性能的服务器高可用或热备解决方案,以 VRRP (路由器冗余协议)协议为实现基础,用 VRRP 协议来实现高可用性(HA);
VRRP(Virtual Router Redundancy Protocol)协议是用于实现路由器冗余的协议,VRRP 协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器 IP(一个或多个),而在路由器组内部,如果实际拥有这个对外 IP 的路由器如果工作正常的话就是 MASTER,MASTER 实现针对虚拟路由器 IP 的各种网络功能,其他设备不拥有该虚拟 IP,状态是 BACKUP,除了接收 MASTER 的VRRP 状态通告信息外,不执行对外的网络功能。当主机失效时,BACKUP 将接管原先 MASTER 的网络功能。
VIP IP 主机名 主从 192.168.126.98 192.168.126.99 keep99 master 192.168.126.98 192.168.126.100 keep100 backup
操作:
(1)安装keepalived:使用 yum 命令进行安装 yum install keepalived –y
(2)安装之后,在 etc 里面生成目录 keepalived,有文件 keepalived.conf并修改配置。
配置文件:
global_defs { notification_email { ##邮件提醒 acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.17.129 smtp_connect_timeout 30 router_id LVS_DEVEL ## 标识本节点的字条串,通常与host文件的主机名一致 } vrrp_script chk_http_port { script "/usr/local/src/nginx_check.sh" interval 2 #(检测脚本执行的间隔) weight 2 } vrrp_instance VI_1 { state BACKUP # 备份服务器上将 MASTER 改为 BACKUP interface ens33 //网卡 virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同 priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.17.50 // VRRP H 虚拟地址 } }
检查脚本文件:
(2)在/usr/local/src 添加检测脚本 #!/bin/bash A=`ps -C nginx –no-header |wc -l` if [ $A -eq 0 ];then /usr/local/nginx/sbin/nginx sleep 2 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then killall keepalived fi fi
(3) 启动服务:
把两台服务器上 nginx 和 keepalived 启动
启动 nginx:./nginx
启动 keepalived:systemctl start keepalived.service
(4) 测试:
把主服务器 上的nginx 和 keepalived 停止,再输入 192.168.17.50(虚拟IP)
#启动keepalived keepalived #杀掉keepalived的进程 killall keepalived
五:nginx原理解析
内存模型:
说明:
在nginx启动后,会有一个master进程和多个worker进程,master进程主要用来管理worker进程.
基本的网络事件会交给worker进程处理。多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的 。一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。worker 数和服务器的 cpu 数相等是最为适宜的。
这种机制的好处:
(1)可以使用 nginx –s reload 热部署,利用 nginx 进行热部署操作.
(2)每个 woker 是独立的进程,如果有其中的一个 woker 出现问题,其他 woker 独立的,
继续进行争抢,实现请求过程,不会造成服务中断。