欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Nginx快速手册(2)

程序员文章站 2022-05-02 18:08:18
...

1.nginx实现负载均衡配置,在nginx.conf中进行配置

1.在http块中加入upstream实现负载均衡服务器列表
http{ 
  upstram myserver {
    server 192.168.17.129:8080;
    server 192.168.17.129:8081;
    }
}

2.在http块的server块中加入server_name
server{
  server_name 192.168.17.129
}

3.在http块的server块的location块中加入proxy_pass
location /{
  proxy_pass http://myserver;
}

 

2.随着互联网信息的爆炸性增长,负载均衡已经不在是一个很陌生的话题,顾名思义,负载均衡即是将负载分摊到不同的服务单元,既保证服务的可用性,又保证响应的足够快,给用户很好的体验,nginx实现负载均衡提供了4种分配方式

1.轮训
  每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,
  能自动删除
2.weight
  weight权重,默认为1,权重越高被分配的客户端越多,指定轮训几率,weight
  和访问比率成正比,用于后端服务器性能不均的情况下,例如:
  upstream server_pool{
    server 192.168.19.21 weight=3;
    server 192.168.19.20 weight=2;
  }
3.ip_hash
  每个请求访问ip的hash结果分配,这样每个访问固定访问一个后端服务器,
  可以解决session问题
  upstream server_pool{
    ip_hash
    server 192.168.19.21;
    server 192.168.19.20; 
  }
  
 4.fair第三方
  按照后端服务器的响应时间来分配请求,响应时间短的优先分配
  upsteam server_pool{
    server 192.168.19.21;
    server 192.168.19.20; 
    fair
  }

 

3.nginx配置实例-动静分离

nginx动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把
动态页面和静态页面物理分离,严格意义上说是动态请求和静态请求分开,可以理解
成使用nginx处理静态页面,后端服务器处理动态页面
   动静分离从目前实现角度来说大致分为两种,一种是纯粹把静态文件独立成单独
的域名,放在独立的服务器上,也是目前主流推崇的方案,另一种方法就是动态跟静
态文件混合在一起发布,通过nginx来分开,通过location指定不同的后缀实现名
实现不同的转发,通过expires参数设置,可以使浏览器缓存过期时间,减少与服务
器之间的请求和流量。具体expires定义:是给一个资源设置一个过期时间,无需去
服务端验证,直接通过通过浏览器自身确认是否过期即可,所以不会产生额外的流量,
此种方法非常适合不常变动的资源

 

4.动静分离配置,在nginx.conf中进行配置

1.首先先创建静态文件夹
2.server块中配置
  location /www/{
      root /data/;
      index index.html index.html;
  }
  
  location /image/{
      root /data/;
      autoindex on; #列出image文件夹中所有内容
  }
 3.在浏览器输入 http:/127.0.0.1:80080/image/就可以看到静态文件

 

5.nginx高可用配置,主从服务器配置

项目部署后,考虑到项目的容灾性,通常都要配置主服务器和备用服务器,如果主
服务器因为一些原因挂掉的话,可以立即将请求转入备用服务器,保证服务的正常可用

1.配置高可用的准备工作
   (1)需要两台服务器192.168.17.129和192.168.18.131
   (2)在两台服务器安装nginx
   (3)在两台服务器上安装keepalied
       yum install keepalived -y
   (4)安装之后,在etc里面生成目录keepalived,有文件keepalived.conf
      之后主备配置都在这个文件里配置

2.完成高可用配置(主从配置)
(1)修改/etc/keepalived/keepalivec.conf配置文件
vrrp_instance VI_1{
  state MASTER #备份服务器上将master改为backup
  interface ens33 #网卡
  virtual_router_id 51 #主,从机的virtual_router_id必须相同
  priority 100 #主 从机取不同的优先级,主机值较大,备份机较小
  advert_int 1
  authentication{
    auth_type PASS
    auth_pass 1111
  }
  virtual_ipaddress{
    192.168.17.50 #VRRP 虚拟地址
  }

}

(2)在/usr/local/src添加检测当前nginx挂没挂的检测脚本
#!/bin/bash
A='ps -C nginx -no-header |wc -l'
if [$A -eq 0];then
  /usr/loacl/nginx/sbin/nginx
  sleep 2
  if ['ps -Cnginx --no-header |wc -l' -eq 0];then
    killall keepalived
  fi
fi

(3)把两台服务器上的nginx和keepalived都启动起来
启动nginx: ./nginx
启动keepalived: systemctl start keepalived.service

 

6.nginx原理

1.nginx采用master-worker机制
  nginx采用一个master进程和多个worker进程来实现高并发,高性能,master
进程通过信号告诉worker进程有新的请求,多个worker争抢处理请求,对于worker
进程来说,独立的进程,不需要加锁,所以省掉了锁带来的开销。其次,采用独立进
程,可以让互相之间不会影响,一个进程退出,其他进程还在工作,服务不会中断,
master则会很快启动新的worker进程,当然,worker进程的异常退出,肯定是程
序有bug了,异常退出,会导致当前worker上的所有请求失败,不过不会影响到所有
请求,所以降低了风险

 

7.需要设置多少个worker

nginx同redis类似都采用了io多路复用机制,每个worker都是一个独立的进程
,但每个进程里只有一个主线程,通过异步阻塞的方式来处理请求,即使是成千上万
个请求也不在话下,每个worker的线程可以把一个cpu的性能发挥到极致,所以
worker数和服务器的cpu数相等是最为适宜的,设少了会浪费cpu,设置多了会造成
cpu频繁切换上下文带来的损耗

 

        努力为大家分享更多通俗易懂有趣的python知识哦!欢迎大家关注我的微信公众号:宁仔说python,让学习变得开心简单吧!

Nginx快速手册(2)