第五期 | Nginx 反向代理及负载均衡

Posted 扣丁学堂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第五期 | Nginx 反向代理及负载均衡相关的知识,希望对你有一定的参考价值。

杨哥

云计算专家、实战派讲师

Linux云计算教学总监

中国第29位RHCA(红帽认证架构师)。

曾就职于中国银行、神华集团等,擅长高并发网站架构设计、实施、自动化运维开发,企业公有云运维及私有云运维开发、人工智能应用、优化方案调整,OpenStack&Docker深层次应用开发,Hadoop、spark大数据平台运维、应用开发,IBMAIX下高可用解决方案PowerHA、OracleRAC等。


每周四将持续更新nginx架构以及运维,包括

第一章:Nginx初探

第二章:Nginx配置

第三章:Nginx虚拟主机

第四章:Nginx 反向代理及负载均衡

第五章:Nginx 静态资源及动静分离

第六章:Nginx rewrite指令集详解

第七章:Nginx Location 详解

第八章:Nginx 日志、升级及个性化配置

第九章:Nginx 的安全及流量控制

第十章:Nginx 中的已定义变量

第十一章 :Nginx 监控

其中包括许多实例,赶快约起来吧~过程中有任何疑问,或者问题都可以在下方留言,杨哥会一一为大家解答的!


技术分割线


第五期 | Nginx 反向代理及负载均衡

Nginx 反向代理及负载均衡

第五期 | Nginx 反向代理及负载均衡


代理(Proxy)也称网络代理。

它是一种特殊的网络服务,允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接。一些网关、路由器等网络设备具备网络代理功能。一般认为代理服务有利于保障网络终端的隐私或安全,防止攻击。

代理通常被分为正向代理、反向代理及透明代理。下面将分别做一些解释下的描述。


正向代理

正向代理是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。

第五期 | Nginx 反向代理及负载均衡


反向代理

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端。


透明代理

透明代理,说白了他也是一个正向代理。 只是这个代理部署在了网关上。对用户来说是透明的、无感知的。


Nginx 反向代理配置

场景假设


假设一个场景。我们有两台服务器,上面都运行了一个Nginx的虚拟主机www.qfedu.com ,且开启了80端口。另外我们有一台服务器,计划代理两台机器上的 www.qfedu.com 这个业务。 这台反向代理服务器应该如何配置呢?


想知道答案的同学赶快去小程序观看杨哥Linux教学视频吧~


反向代理配置


upstream backend

{

    server 192.168.122.129:80;

    server 192.168.122.130:80;

}

server

{

    listen 80;

    server_name www.qfedu.com;

    access_log /data0/www/logs/www.qfedu.com-access_log main;

    error_log  /data0/www/logs/www.qfedu.com-error_log;


    location / {

        proxy_pass http://backend;

        proxy_set_header Host $host;

    }

}


WEB 服务器配置

server {

    listen 80;

    server_name www.qfedu.com;

    root /data0/www/htdocs/www.qfedu.com;

    access_log /data0/www/logs/www.qfedu.com-access_log main;

    error_log  /data0/www/logs/www.qfedu.com-error_log;


    location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ {

        expires      1d;

    }


    location ~ .*.(js|css)?$ {

        expires      1d;

    }

}


测试

// 2台Nginx 服务器上做如下配置

// 192.168.122.129

# echo "hello" > /data0/www/htdocs/www.qfedu.com/hello.html

// 192.168.122.129

# echo "world" > /data0/www/htdocs/www.qfedu.com/hello.html

// 在反向代理服务器上进行测试。 反复进行2次以上测试,发现每次响应结果都不一样。

// 具体为什么不一样,我们将在下一节负载均衡中去具体的介绍。

# curl http://127.0.0.1/hello.html -H "HOST: www.qfedu.com"

hello

# curl http://127.0.0.1/hello.html -H "HOST: www.qfedu.com"

world


负载均衡

Nginx 服务器反向代理的一个重要用途就是实现负载均衡。随着信息量的不断增长,目前网络的业务量急剧升高,访问量和数据流量也在飞速的增长。因而对网络本身的处理能力和计算能力的要求也越来越高。现有的网络硬件条件显然不能满足日益增长的需求,但是完全抛弃已有的硬件环境又不现实。于是就出现了”网络负载均衡“(LB,Load Balancing) 这样的技术,该技术一出现就迅速在网络建设中得到普及。


什么是负载均衡

在实际应用中,负载均衡会根据网络的不同层次(一般按照OSI的七层参考模型)进行划分。现代的负载均衡技术主要实现和作用于网络的第四层和第七层,完全独立于网络基础硬件设备。负载均衡主要通过专门的硬件设备实现或者通过软件算法实现。通过硬件设备实现的负载均衡效果好、效率高、性能稳定、但成本高。通过软件实现的负载均衡主要依赖于负载均衡算法的选择和程序的健壮性。而我们介绍的Nginx是典型的软件实现七层负载均衡。


Nginx 负载均衡配置

Nginx 实现了静态的基于优先级的加权轮训算法,主要使用proxy_pass 指令和 upstream 指令实现负载均衡。下面我们将通过一些实例去具体了解负载均衡配置。


实例: 一般轮训规则的负载均衡

upstream backend

{

    server 192.168.122.129:80;

    server 192.168.122.130:80;

}

server

{

    listen 80;

    server_name www.qfedu.com;

    access_log /data0/www/logs/www.qfedu.com-access_log main;

    error_log  /data0/www/logs/www.qfedu.com-error_log;


    location / {

        proxy_pass http://backend;

        proxy_set_header Host $host;

    }

}


下一章我们将讲解Nginx 静态资源及动静分离

预告


想要学习更多的同学,赶快去官网/小程序,观看杨哥Linux教学视频吧!



想要 专 属 福 利 ,来找CoCo酱

   微信ID:cocojiang525  

点击【阅读原文】领取“粉丝专属福利”

以上是关于第五期 | Nginx 反向代理及负载均衡的主要内容,如果未能解决你的问题,请参考以下文章

nginx反向代理及tomcat负载均衡

nginx反向代理及tomcat负载均衡

Nginx 负载均衡反向代理

Nginx 反向代理

nginx实战反向代理配置缓存及负载均衡

nginx的反向代理