nginx的使用经验

一、概念

1、什么是nginx?

 Nginx是一款轻量级的Web 服务器/反向代理服务器,其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,其为性能优化而开发的,非常注重效率,能经受高负载的考验,有报告表明,能够支持高达 50,000 个并发连接数的响应。

2、nginx正向代理概念

在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问

在这里插入图片描述

3、反向代理的概念

发送请求给反向代理服务器,由反向代理服务器去选择目标服务器获取数据,然后返回给客户端,此时反向代理服务器和目标服务器对外部来说就是一个服务器,暴露的是代理服务器的ip,隐藏的是目标服务器的IP地址。

在这里插入图片描述

4、负载均衡的概念

负载均衡就是增加服务器数量,当很多请求发送给代理服务器后,代理服务器会根据负载算法,将请求发送到不同的目标服务器上,从而有效降低目标服务器的压力。

在这里插入图片描述

5、动静分离

为了加快网站的解析速度,可以把静态页面跟动态页面交由不同的服务器解析,加快解析速度,降低原来单个服务器时的压力

在这里插入图片描述

二、实战

1、反向代理

#在server块里面配置监听端口及访问的地址和代理的地址(原理就是当请求过来时,会转发到:http://127.0.0.1:9000/)
server {
    listen       80;
    server_name  127.0.0.1;
    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;
    location / {
        root   /usr/share/nginx/html;
        proxy_pass http://127.0.0.1:9000/;
        index  index.html index.htm;
    }
    ...
}

2、负载均衡

#增加应用服务器,然后当请求过来时,会经过负载均衡算法,选择去访问哪台服务器
http{
...
	upstream myserver{
		server http://127.0.0.1:9000/ weight=1;  #weight表示权重,权重越大,此服务器负载会多一些
		server http://127.0.0.1:9001/ weight=1;
		ip_hash; #可以解决session问题(可选)
		fair;  #选择响应时间短的服务器(可选)
	}
	server {
		listen       80;
		server_name  127.0.0.1;
		#charset koi8-r;
		#access_log  /var/log/nginx/host.access.log  main;
		location / {
			...
			proxy_pass http://myserver;
			proxy_connect_timeout 10;
		}
		...
	}
	...
}

3、动静分离

server {
    listen       80;
    server_name  127.0.0.1;
    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;
    location ^~ /static {  #静态
        root /home/data/;
		index  index.html index.htm;
    }
	location ^~ /pc {  #动态
        root /home/data/;
		index  index.html index.htm;
    }
    ...
}

4、nginx配置高可用集群

1)为什么要高可用?
当只有一个nginx服务器时,出现宕机后果就会非常严重,导致服务外部访问不到服务,所以需要nginx做集群实现高可用,一台宕机了,另一台可以继续工作,保证服务的高可用。 在这里插入图片描述
2)高可用
需要部署两台nginx服务器,也就是主备服务器,master为主服务器,bakup为备份服务器。这两台服务器之间的关联通过keepalived来实现的,首先我们要在keepalived的配置文件中配置绑定网卡的虚拟IP,然后还要编写检测脚本来检测nginx是否活着,如果master宕机了,那么就切换到bakup服务器,实现服务正常访问。首先两台nginx服务器都需要安装keepalived,然后配置配置文件
在这里插入图片描述
2.1主服务器中keepalived配置(keepalived.conf)

#全局定义
global_defs {
   notification_email {
    root@localhost
   }
   notification_email_from keepalived@localhost           #定义来信人
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id node-00 #主机名(可在hosts文件中配置)
}
#检测脚本块
vrrp_script check_http_port {
	script "/usr/local/nginxcheck/nginx_check.sh" #nginx是否或者的检测脚本
	interval 2  # 脚本执行的间隔时间(秒)
	weight 2  #权重
}
#虚拟IP块
vrrp_instance VI_1 {
    state MASTER          #配置是主服务器还是备份服务器的地方 master/bakup
    interface enp1s0      #绑定的网卡名(所在服务器的网卡名)
    virtual_router_id 38  #主备机的virtual_router_id必须相同,唯一即可
    priority 100          #优先级,主服务器优先级高于备份服务器
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass x1er44q
    }
    virtual_ipaddress {
        192.168.17.50   #vrrp 虚拟IP地址
    }
}

2.2备份服务器中keepalived配置(keepalived.conf)

#全局定义
global_defs {
   notification_email {
    root@localhost
   }
   notification_email_from keepalived@localhost           #定义来信人
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id node-01 #主机名(可在hosts文件中配置)
}
#检测脚本块
vrrp_script check_http_port {
	script "/usr/local/nginxcheck/nginx_check.sh" #nginx是否或者的检测脚本
	interval 2  # 脚本执行的间隔时间(秒)
	weight 2  #权重
}
#虚拟IP块
vrrp_instance VI_1 {
    state BAKUP          #配置是主服务器还是备份服务器的地方 master/bakup
    interface enp1s0      #绑定的网卡名(所在服务器的网卡名)
    virtual_router_id 38  #主备机的virtual_router_id必须相同,唯一即可
    priority 90          #优先级,主服务器优先级高于备份服务器
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass x1er44q
    }
    virtual_ipaddress {
        192.168.17.50   #vrrp 虚拟IP地址
    }
}

2.3检测nginx是否活着的脚本

#!/bin/bash
a=`ps -c nginx -no-header |wc -l`
if [ $A -eq 0 ];then
	/usr/local/nginxcheck
	sleep 2
	if [ `ps -c nginx -no-header |wc -l` -eq 0 ];then
		killall keepalived
	fi
fi

三、nginx的原理

1、工作原理
nginx是通过master分配任务给worker,而worker有多个,且worker之间是通过争抢任务,然后抢到任务再做相应的反向代理工作的
在这里插入图片描述
在这里插入图片描述
2、一个master和多个worker工作机制的好处

1)可以使用nginx -s reload 做热部署(线上nginx不好做重启,风险大),利用nginx进行热部署操作
2)对于每个worker来说都是一个独立的进程,不需要加锁,避免了加锁带来的开销;相互之间不会影响,一个进程退出后,其他进程继续工作,不会中断,master很快启动新的worker进程

3、worker设置多少个合适

#一般是根据服务器的CPU核数进行设置的,一般多少核就设置多少worker,使CPU的利用率达到极致
...
#nginx进程,一般数值为cpu核数(worker数量)
worker_processes  1;
...
#工作模式及连接数上限
events {
    #单个后台worker process进程的最大并发连接数
    worker_connections  1024;
}
http {
    server {
		...
	}
}

4、如何计算能够支持的最大并发数是多少

发送一个请求,占用了worker的几个连接数?
答:2个(请求静态资源)或者4个(请求动态资源)

请求静态资源
请求动态资源

1)请求静态资源
最大并发数 = 最大并发连接数 *  worker数  /  2
最大并发数  = worker_connections *  worker_processes  /  2
2)请求动态资源
最大并发数 = 最大并发连接数 *  worker数  /  4
最大并发数  = worker_connections *  worker_processes  /  4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值