一、概念
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

155

被折叠的 条评论
为什么被折叠?



