• 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之.我也是在学习中,如有错误,敬请斧正,不胜感激.

  • 相关阅读:
    西瓜书第三章-线性回归模型
    西瓜书第三章-线性模型【Logistic回归】(对数几率回归)
    Matlab绘图(二)低频率命令总结
    LaTex 资源总结
    plsql developer安装和使用遇到的问题解决
    【maven依赖包版本号是unknown导致无法下载】问题解决
    解决TortoiseGit报错:git did not exit cleanly (exit code 128)
    os模块的常用方法使用
    pycharm总是没有输出结果只是Process finished with exit code 0
    Jmeter发送post请求,报错:Content type 'text/plain;charset=UTF-8' not supported
  • 原文地址:https://www.cnblogs.com/1xin1yi/p/7406678.html
Copyright © 2020-2023  润新知