• nginx反向代理和负载均衡


    目录:

    1. 实验环境
    2. 安装并配置nginx
    3. Nginx的反向代理
    4. Nginx的负载均衡
    5. 这里是一台nginx代理服务器,两台web服务器。

    Nginx反向代理服务器:192.168.1.100

    Web1:192.168.1.51

    Web2:192.168.1.89

    一:环境准备

    1) Centos 6.5 x86_64

    2) Nginx 1.4.7

    3) 各个节点时间同步(每个节点上和代理服务器上都要执行)

    4) 关闭防火墙和Selinux(每个节点和nginx代理服务器上都要操作执行)

    # service  iptables  stop

    # chkconfig  iptables  off

    # vim  /etc/selinux/config

    SELINUX=disabled

    二、安装并配置nginx反向代理服务器。

    5) Nginx的安装

    Nginx代理服务器的安装有专门的附件安装nginx服务器,这里不再详说。Nginx已经成功安装在centos 6.5上。(192.168.1.100)且可以正常访问页面。

    6) 在两台web服务器上安装web,web1为centos 6.5_x64的系统,web2也为centos6.5_x64的系统。

    7) 在两台web服务器上安装web(两台上面都执行)

    # yum  -y  install  httpd

    8) # echo  “<h1>web1.test.com</h1>”  >  /var/www/html/index.html

    # echo  “<h1>web2.test.com</h1>”  >  /var/www/html/index.html

    或者(两台web上都要做)

    # cd  /var/www/html/

    # vim  index.html

        <h1>web1.test.com</h1>

    9) # service  httpd  start

    # systemctl  start  httpd.service

    # netstat  -anpt  |  grep  :80

     

    之后在浏览器中访问,可以正常访问

     

     

    10) 正向代理

    正向代理,也就是我们常说的代理,其工作原理为:我访问不了某个网站,但

    是我能访问一个代理服务器,这个代理服务器他能访问那个我不能访问的网站,于 是我连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回      来之后返回给我。从网站的角度来说只在代理服务器来取内容的时候有一次记录, 有时候并不知道是用户的请求,也隐藏了用户的资料,这取决于代理是否告诉网站。

    总之,正向代理是一个位于客户端和原始服务器之间的服务器,为了从原始服 务器取得内容,客户端向代理发送一个请求并指定目标,然后代理向原始服务器转 交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用

    正向代理。

    11) 反向代理的概念

    反向代理就是客户端并不知道代理服务器上没有自己要的内容,对于客户端

    来说代理服务器就是原始服务器,且客户端不需要做任何特别设置,客户端向反向 代理服务器的命名空间中的内容发送普通请求,接着反向代理服务器判断向何处转 交请求,并将获得的内容返回给客户端,就像是这些内容是他自己的一样。

    12) 正向代理和反向代理的区别

    正向代理的典型应用是为在防火墙内的局域网客户端提供访问Internet的途径。

    正向代理还可以使用缓冲特性减少网络使用率,反向代理的典型用途是将防火墙后面的服务器提供给Internet用户访问。反向代理还可以为后端的多台服务器提供负载均衡,或者为后端较慢的服务器提供缓冲服务。另外,反向代理还可以启用高级URL策略和管理技术,从而使处于不同web服务器系统的web页面同时存在与同一个URL空间下。

    安全方面来说,正向代理允许客户端通过它访问任意网站并且隐藏客户端自身, 因此你必须采取安全措施以确保仅为经过和授权的客户端提供服务。反向代理对外 都是透明的,访问者并不知道自己访问的是一个代理。

    三、反向代理服务器的配置。

    13) 配置nginx反向代理服务器

    # cd  /usr/local/nginx/conf/

    # cp  nginx.conf  nginx.conf.bak

    # vim  nginx.conf

    http{}中的server{}中的location  / {}中添加:proxy_pass http://192.168.1.51;

    # /usr/local/nginx/sbin/nginx  -t

     

    # pkill  -9  nginx

    # /usr/local/nginx/sbin/nginx

    之后在浏览器中直接访问nginx反向代理服务器的地址,即可访问到1.51上的信息。

     

    14) 看一下web上的httpd的日志

    # tail  /var/log/httpd/access_log

    看到是反向代理服务器的ip而不是客户端的ip。

     

    四、负载均衡的配置。

    15) upstream负载均衡模块说明

    upstream是nginx的http upstream模块,这个模块通过一个简单的调度算法来实现客户端ip到后端服务器的负载均衡,通过upstream指令指定一个负载均衡的名称。这个名称任意指定,在后面需要用到的地方直接调用即可。

    16) upstream支持负载均衡算法

    nginx的负载均衡模块目前支持4种调度算法,

    轮询(默认的):每个请求按照时间顺序依次分配到不同的后端服务器,如果后端服务器宕机,故障服务器自动被剔除,使用户访问不受影响。Weight指定权重值,值越大访问到的几率越大,这个看后端服务器的配置水平而定。

    Ip_hash:每个请求按访问ip的hash结果分配,这样来自同一个ip的访客固定访问一个后端服务器,有效解决了动态页面存在的session共享问题。

    Fair:这是比上两个更加智能的负载均衡算法,此种算法可以依据页面代销和加载时间的长短智能的进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。

    url_hash:此方法按照访问URL的hash结果来分配请求,使每个URL定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。

    17) upstream支持的状态参数

    http upstream模块中,可以通过server指令指定后端服务器的ip地址和端口,同时还可以设定每个节点在负载均衡调度中的状态,比如:down:表示当前Server不参与负载均衡。backup:预留的备份,当其他所有非backup机器出故障或者繁忙的时候,才会请求backup机器,所以此机器的压力也是最轻的。

    max_fails:允许请求失败的次数,默认为1,当超过最大次数时,返回

    proxy_next_upstream模块定义的错误。

    Fail_timeout:在经历了max_fails失败后,暂停服务的时间。Max_fails和faul_timeout一起使用。

    注意:当负载调度算法为ip_hash时,后端服务器在负载均衡调度中的状态不能是Weight和backup。

    18) nginx服务器上

    # cd  /usr/local/nginx/conf

    # vim  nginx.conf

    http{}中server{}外添加:

    upstream    webservers {

            server  192.168.1.51    weight=1;

            server  192.168.1.89    weight=1;

            }

     

    并且修改location  / {}中http://后的名称为upstream后的名字

    location / {

                root   html;

                index  index.html index.htm;

                proxy_pass  http://webservers;

        

            }

     

    # /usr/local/nginx/sbin/nginx  -t

    # pkill  -9  nginx

    # /usr/local/nginx/sbin/nginx

    之后通过浏览器访问192.168.1.100,nginx反向代理服务器,则会依次显示1.51和1.89web服务器上的网页信息。在权重为1时,其概率是同等的。可以根据两个web服务器的性能不同调整权重值。

    19) 配置nginx反向代理服务器,进行健康状态检查

    max_fails:允许请求失败的次数,默认为1.当超过最大次数时,返回

    proxy_next_upstream模块定义的错误。

    Fail_timeout:在经历了max_fails次失败后,暂停服务时间。Max_fails可以和faile_timeout一起使用,进行健康状态检查。

    20) upstream{}的weight后添加max_fails和fail_timeout,如下所示:

    # vim  /usr/local/nginx/conf/nginx.conf

    upstream    webservers {

            server  192.168.1.51    weight=1  max_fails=2  fail_timeout=2;

            server  192.168.1.89    weight=1  max_fails=2  fail_timeout=2;

            }

     

    # /usr/local/nginx/sbin/nginx  -t

    之后停止一个web1服务器,在浏览器中继续访问反向代理服务器,发现其只能访问到web2服务器了,之后再将web1启动,访问发现web1和web2都好了。这说明nginx的健康状态检查配置成功。

  • 相关阅读:
    《JavaScript高级程序设计》学习笔记12篇
    JS学习笔记12_优化
    JS学习笔记11_高级技巧
    JS学习笔记10_Ajax
    JS学习笔记9_JSON
    JS学习笔记8_错误处理
    为什么要在列表组件里写 Key ?
    var、let 和 const 的区别以及暂时性死区
    小程序性能优化要点
    Node require() 加载规则
  • 原文地址:https://www.cnblogs.com/luyuheng/p/11646267.html
Copyright © 2020-2023  润新知