nginx 初探 之反向代理

首先要解释的是什么叫做反向代理?

平时我们浏览网页可以输入网址直接访问,  但如果访问国外的网站,  可能就没那么简单('中国特色'),  这时候我们需要配置一个代理服务器, 

然后通过此服务器中转来访问需要的网址.  这个过程就是(正向)代理.  客户端是知道自己使用了代理的.

 

反向代理是相对于(正向)代理说的.  倘若我们要访问的网站是集群部署的,  服务器不止一台,那么该由哪台服务器来响应请求呢?

这时候网站需要一个代理服务器,对外暴露服务(网址),  浏览器(客户端)只访问代理服务器, 由代理服务器根据一定的策略决定哪台服务器响应. 

这个过程就是反向代理.  客户端不知道自己的请求被代理服务器转发了..

 

祭出一张图:

 

nginx就是一款优秀的http服务器和反向代理服务器,我们把它安装并启动后,在浏览器中输入localhost,就可以看到nginx默认页.

nginx配置文是nginx.conf ,打开来找到下面的部分:

server {
      listen       80;   #nginx监听在80端口
        server_name  localhost;   #nginx要监听的地址

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
 
        location / {  # / 表示 兜底的匹配方式,匹配所有未找到合适匹配的请求
    
           root   html; #这里是nginx默认根目录
            indexl index.html index.htm;#默认的首页
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {  #"=/50x.html" 表示精确匹配 localhost/50x.html 的请求
            root   html;
        }

从注释可以看出来, 当访问地址localhost的时候,发现是 端口是 80 ,且server_name是localhost  , 能够匹配 的 location为 /  .所以被解析为nginx_server_path/html/index.html .

 

如果我们要自定义转发的地址怎么办呢,添加两个配置即可 upstream ,proxy_pass.

  upstream anyname{#要转发到的服务器列表
        server 192.168.0.103:8080 weight=1;#服务器地址1,权重1.
        server 192.168.0.103:8081 weight=1;#服务器地址2,权重1
        #server 192.168.0.103:8082 backup;  #热备  
        #ip_hash;#固定转发
        }
    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
        proxy_pass   http://anyname; #代理转发
            root   html;
            index   login.html index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

这样就可以随意转发请求到自定义的服务器了.

nginx作为 反向代理服务器,也有软负载均衡的能力,主要有这么几种类型

1、热备:如果你有n+1台服务器,当n台服务器都发生事故时,才启用热备服务器给提供服务。服务器处理请求的顺序:ABCABCABC突然ABC都挂啦,BBBBBBBBBBBBBB.....

upstream mysvr { 
      server 192.168.0.103:8080; 
      server 192.168.10.103:8082 backup;  #热备     
    }

2、轮询:nginx默认就是轮询,其权重都默认为1,服务器处理请求的顺序:ABABABABAB....

upstream mysvr { 
      server 192.168.0.103:8080;
      server 192.168.10.103:8081;       
    }

3、加权轮询:跟据配置的权重的大小而分发给不同服务器不同数量的请求。如果不设置,则默认为1。下面服务器的请求顺序为:ABBABBABBABBABB....

 upstream mysvr { 
      server 192.168.0.103:8080  weight=1;
   server 192.168.10.103:8081 weight=2;
}

4、ip_hash:nginx会让相同的客户端ip请求相同的服务器,可以避免分布式session的问题,但也容易负载失衡。

upstream mysvr { 
      server 192.168.0.103:8080; 
      server 192.168.10.103:8081;
      ip_hash;
    }

关于nginx负载均衡配置的几个状态参数讲解。

  • down,表示当前的server暂时不参与负载均衡。

  • backup,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。

  • max_fails,允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。

  • fail_timeout,在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。

 upstream mysvr { 
      server 127.0.0.1:7878 weight=2 max_fails=2 fail_timeout=2;
      server 192.168.10.121:3333 weight=1 max_fails=2 fail_timeout=1;    
    }

上面就是nginx反向代理和负载均衡的简单配置.如果要深入学习请google之.我也是在学习中,如有错误,敬请斧正,不胜感激.

 

posted @ 2017-08-21 21:05  水军  阅读(411)  评论(0编辑  收藏  举报