Nginx的基本理解

Nginx出现的背景

随着业务量和用户量的逐渐庞大,单机方式已经满足不了大公司对外提供服务的需求。因此会选择搭建一个包含若干台服务器的集群,对外提供服务。但集群在用户看来就是一个整体(相当于一台服务器)。所以,用户该如何正确的访问到集群中的某一台服务器,来处理自己当前的请求。这里就需要有一个网关,作为服务对外暴露的一个接口。即所有请求都先发送到这个网关,网关再根据请求的类型转发到对应的服务器。同时,如果多台服务器提供一样的服务,该网关希望将请求平均分配到这些不同的服务器上进行处理,来保障某一个机器的负载不会过重。

所以上面涉及到了Nginx的三大作用:反向代理,负载均衡,动静分离(最后一条上面没说)。

反向代理

有反向代理那么就必然有正向代理,正向代理的例子就比如说我们访问维基百科。在连上代理服务器以后,我们的ip就可以转成这台服务器的ip了(假设是脚盆鸡的),此时通过这种中转就可以成功访问google了。

这里的代理服务器就是做正向代理的。正向代理服务器位于客户端和服务器之间,为了向服务器获取数据,客户端要向代理服务器发送一个请求,并指定目标服务器,代理服务器将目标服务器返回的数据转交给客户端。这里客户端是要进行一些正向代理的设置的。

而反向代理与正向代理的区别在于:正向代理代理客户端,反向代理代理服务器

反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。

以下面的配置代码为例:

server {
        listen       80;
        server_name  www.123.com;

        location / {
            proxy_pass http://127.0.0.1:8080;
            index  index.html index.htm index.jsp;
        }
    }

上述配置是nginx.conf中server模块的一些核心配置。listen表示nginx服务器监听80端口;server_name是访问该服务器的url(例如这里访问的是www.123.com,实际是访问通过DNS解析后的服务器ip),listen与server_name共同组成了nginx暴露给对外提供的ip和端口;proxy_pass是反向代理的核心,表示将请求转发给http://127.0.0.1:8080,这个才是服务器真实的ip地址和端口。

值得注意的是,location后面可以用正则表达式来选择相应的请求:

location [ = | ~ | ~* | ^~] uri {
 
}

其中用得比较多的是~,例如 location ~ /edu/就是在nginx收到edu的请求时,才会转发给对应大括号里面的proxy_pass。这样就可以根据不同的请求,将他们分配到能够处理对应请求的服务器上。

负载均衡

负载均衡很好理解,就是将请求尽可能平摊到各个服务器上,使得某一台服务器的负载不至于过大崩掉。Nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为轮询,加权轮询,ip hash。扩展策略。

通过三张图来看一下具体区别:
在这里插入图片描述
上图为轮询策略,不断轮询着把每个请求分配到不同的服务器上。
在这里插入图片描述
上图为加权轮询,权重越高的服务器被分配到的请求越多。

在这里插入图片描述
上图为ip hash分配策略,通过客户端的ip来计算hash值,确定访问某一台服务器。这样可以保证同一个客户端每次请求访问到的服务器是一样的,因此其session只需要存储在这一台服务器上即可。

下面配置代码简单介绍下配置思想:

upstream www.domain.com {
         server 222.186.41.118;
         server 222.186.41.174;
}

首先在配置文件的http块中加上上面的代码,表示www.domain.com由两台服务器提供服务。然后需要在server块的proxy_pass中加入下面的语句:

 proxy_pass              http://www.domain.com;

在默认情况下就是轮询策略,此时访问www.domain.com就会把请求均匀轮询分配给上面写好的服务器。如果用权重可在upstream那里,每一个ip后面添加weight=?。具体可以参考Nginx负载均衡配置

动静分离

动静分离,在我们的软件开发中,有些请求是需要后台处理的,有些请求是不需要经过后台处理的(如:css、html、jpg、js等等文件),这些不需要经过后台处理的文件称为静态文件。让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作。提高资源响应的速度。
在这里插入图片描述

参考:

  1. https://www.cnblogs.com/phyger/p/14344895.html
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值