nginx的优点,负载均衡以及动静分离等知识点浅析

问:什么是nginx?
答:nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP这些邮件协议的代理服务器,高可靠性,支持高并发性,低系统资源消耗性,使得nginx火遍全球

问:nginx有什么优点?
答:
1,快速响应:nginx的单次请求会得到更快的响应,另一方面,在高峰期(如有数以万计的并发请求),Nginx可以比其他Web服务器更快地响应请求(官方说nginx可以支持五万并发),尤其是对静态资源的返回,更为迅速。

2,跨平台性,高扩展性:nginx的设计极具扩展性,它是由多个不同功能,不同层次,不同类型且耦合度极低的模块组成,比如HTTP模块中,还设计了HTTP过滤模块,一个正常的HTTP模块处理完请求后,会有一连串的HTTP过滤模块再对其进行过滤,我们开发一个新的HTTP模块时,可以使用HTTP核心模块 events模块 log模块等 还可以自由的复用各种过滤器模块。因此,当对某一个模块修复Bug或进行升级时,可以专注于模块自身,无须在意其他。这种低耦合度的优秀设计,造就了Nginx庞大的第三方模块,当然,公开的第三方模块也如官方发布的模块一样容易使用。
Nginx的模块都是嵌入到二进制文件中执行的,无论官方发布的模块还是第三方模块都是如此。这使得第三方模块一样具备极其优秀的性能,充分利用Nginx的高并发特性,因此,许多高流量的网站都倾向于开发符合自己业务特性的定制模块。

3,高可靠性:经过了实践的检验,功能丰富且稳定。nginx每个worker子进程相对独立,master进程在一个worker子进程出错时可以快速拉起新的worker子进程继续提供服务

4,低内存消耗
一般情况下,10 000个非活跃的HTTP Keep-Alive连接在Nginx中仅消耗2.5MB的内存,这是Nginx支持高并发连接的基础。

5,高并发处理
nginx支持的并发连接上限取决于内存,单机上万的并发量解决起来轻轻松松

6,热部署
master管理进程与worker工作进程的分离设计,使得nginx在不间断提供服务的情况下支持更新配置,更换日志文件,升级nginx可执行文件等

7,支持BSD许可协议
BSD开源协议是一个给予使用者很大自由的协议。基本上使用者可以"为所欲为",可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。

问:nginx的负载均衡配置?
答:
1,轮询

http{
	upstream app1 {
	    server 10.10.10.1;
	    server 10.10.10.2;
	}
	server {
	    listen 80;
	    location / {
	        proxy_pass http://app1;
	    }
	}
}

upstream app1用来指定一个服务器组,该组的名字是app1,包含两台服务器。在指定服务器组里面包含的服务器时以形式“server ip/domain:port”的形式指定,其中80端口可以忽略。然后在接收到请求时通过“proxy_pass http://app1”把对应的请求转发到组app1上。Nginx默认的负载均衡算法就是循环轮询,如上配置我们采用的就是循环轮询,其会把接收到的请求循环的分发给其包含的(当前可用的)服务器。使用如上配置时,Nginx会把第1个请求给10.10.10.1,把第2个请求给10.10.10.2,第3个请求给10.10.10.1,以此类推。

2,least-connected 根据每台服务器的连接数进行请求转发
least-connected算法的中文翻译是最少连接,即每次都找连接数最少的服务器来转发请求。例如Nginx负载中有两台服务器,A和B,当Nginx接收到一个请求时,A正在处理的请求数是10,B正在处理的请求数是20,则Nginx会把当前请求交给A来处理。要启用最少连接负载算法只需要在定义服务器组时加上“least_conn”,如:

upstream app1 {
               least_conn;
    server 10.10.10.1;
    server 10.10.10.2;
}

3,ip-hash 根据ip_hash值定位哪一台服务器处理该请求
ip-hash算法会根据请求的客户端IP地址来决定当前请求应该交给谁。使用ip-hash算法时Nginx会确保来自同一客户端的请求都分发到同一服务器。要使用ip-hash算法时只需要在定义服务器组时加上“ip-hash ”指令,如:

upstream app1 {
              ip_hash;
    server 10.10.10.1;
    server 10.10.10.2;
}

4,weighted 加权算法,性能好的服务器多处理一些
weighted算法也就是权重算法,会根据每个服务的权重来分发请求,权重大的请求相对会多分发一点,权重小的会少分发一点。这通常应用于多个服务器的性能不一致时。需要使用权重算法时只需要在定义服务器组时在服务器后面指定参数weight,如:

upstream app1 {
    server 10.10.10.1 weight=3;
    server 10.10.10.2;
}

问:nginx和apache的区别
答:Apache: 创建多个进程或线程,而每个进程或线程都会为其分配cpu和内存(线程要比进程小的多,所以worker支持比perfork高的并发),并发过大会榨干服务器资源。

Nginx: 采用单线程来异步非阻塞处理请求(管理员可以配置Nginx主进程的工作进程的数量)(epoll),不会为每个请求分配cpu和内存资源,节省了大量资源,同时也减少了大量的CPU的上下文切换。所以才使得Nginx支持更高的并发。
记住一点,nginx是事件驱动,每个请求都由模块分派,这就是nginx快的原因之一!!!

问:Nginx是如何处理一个请求的呢?
答:nginx在启动时,会解析配置文件,得到需要监听的端口与ip地址,然后在master进行中初始化该监控的socket后,再进行listen。之后fork出多个子进程出来竞争上岗,争夺该新的连接。
客户端对nginx发起连接,三次握手后成功建立连接,其中一个子进程获取连接,并创建nginx对连接的封装,即ngx_connection_t结构体,接着事件调用相应事件处理模块,如http模块对客户端进行数据交换,最后nginx或客户端有一方主动关闭连接。

问:nginx怎么配置动静分离
答:直接在nginx.conf文件中的server里面配置一下location,拦截请求并转发给存放静态文件的服务器就行了
在这里插入图片描述
如果是集群,需要用到负载均衡
在这里插入图片描述
配置中的:
在这里插入图片描述
proxy_pass http://192.168.8.203:808 改为 proxy_pass http://static; 这样即可实现均衡。
这上面用到是加权的负载算法,其实用ip_hash更好,可以避免session问题,因为session是存在服务器端的嘛。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值