zoukankan      html  css  js  c++  java
  • Nginx 负载均衡演示之 upstream 参数 & location 参数

    upstream 参数
    nginx关于upstream参数官方文档:http://nginx.org/en/docs/http/ngx_http_upstream_module.html

    upstream 参数

    参数

    描述

    service

    反向服务地址 加端口

    weight

    权重

    max_fails

    失败多少次 认为主机已挂掉则,踢出

    fail_timeout

    踢出后重新探测时间

    backup

    备用服务

    max_conns

    允许最大连接数

    slow_start

    当节点恢复,不立即加入

     service

    每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除 配置如下:

    upstream names{
    server 127.0.0.1:8050 ;
    server 127.0.0.1:8060 ;
    }
    weight(权重)

    指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

    upstream tuling {
    server 127.0.0.1:8050 weight=5;
    server 127.0.0.1:8060 weight=1;
    }
    max_conns

    可以根据服务的好坏来设置最大连接数,防止挂掉,比如1000,我们可以设置800

    upstream tuling {
    server 127.0.0.1:8050 weight=5 max_conns=800;
    server 127.0.0.1:8060 weight=1;
    }
    max_fails、 fail_timeout

    max_fails:失败多少次 认为主机已挂掉则,踢出,公司资源少的话一般设置2~3次,多的话设置1次

    max_fails=3 fail_timeout=30s代表在30秒内请求某一应用失败3次,认为该应用宕机,后等待30秒,这期间内不会再把新请求发送到宕机应用,而是直接发到正常的那一台,时间到后再有请求进来继续尝试连接宕机应用且仅尝试1次,如果还是失败,则继续等待30秒...以此循环,直到恢复。

    upstream tuling {
    server 127.0.0.1:8050 weight=1 max_fails=1 fail_timeout=20;
    server 127.0.0.1:8060 weight=1;
    }

    //关闭掉8050的服务 你会发现在20秒内还是访问8060的,20s后才会访问8050
    记得修改完nginx.conf 后,./sbin/nginx -s reload 重启nginx ,然后我们可以让8050关闭来演示

    负载均衡算法

    轮询+weight   默认的

    ip_hash : 基于Hash 计算

                    应用场景:保持session 一至性

    url_hash: (第三方)

                    应用场景:静态资源缓存,节约存储,加快速度

    least_conn 最少链接

    least_time 最小的响应时间,计算节点平均响应时间,然后取响应最快的那个,分配更高权重。

    下面是ip_hash,url_hash的示意图

    下面是nginx大概的参数流程(粗略) 

    location参数
     

    语法规则: location [=|~|~*|^~] /uri/ { … }

    = 开头表示精确匹配

    ^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。

    ~ 开头表示区分大小写的正则匹配

    ~*  开头表示不区分大小写的正则匹配

    !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则

    / 通用匹配,任何请求都会匹配到。

    多个location配置的情况下匹配顺序为(参考资料而来,还未实际验证,试试就知道了,不必拘泥,仅供参考):

    首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。

    nginx的location配置详解例子(Sign_Black):https://www.cnblogs.com/sign-ptk/p/6723048.html

    下面通过几个例子熟悉和学习nginx的使用场景

    nginx 动静分离演示


    1.为了区分,我们在web1 中 放一张图片 images/tomcat.png 

    cd webapps
    mkdir images //创建一个images文件夹
    cp tomcat.png images/tomcat.png //复制图片到images文件中
    2.进入nginx配置,当然也可以用正则表示式的方式,这里是简单演示

    3.配置host   

    这样就完成了

    防盗链配置:
    什么是图片防盗链?意思是指本站内图片、CSS等资源只有本站点可以访问,不允许其它站点打开! 该功能如果用JAVA如何实现?很单简单,只要判断一下 请求头当中的referer 属性是否为 指定域名即可。 Nginx原理类似。

    # 加入至指定location 即可实现

    valid_referers none blocked *.luban.com;

     if ($invalid_referer) {

           return 403;

    }
    演示防盗链配置:

    说明:如果 valid_referers 条件判断未通过,nginx 则会赋值 invalid_referer 为true

    语法: valid_referers none | blocked | server_names | string ...;

    参数说明:

    none 不允许 “Referer” 来源头部为空的情况

    blocked 不允许“Referer”值为空情况,有可能Referer被的值被代理或者防火墙删除

    server_names “Referer”来源头部包必须含当前的server_names (当前域名)可以多个 

    (关于valid_referers比较详细的讲解:https://blog.csdn.net/ywb201314/article/details/51461053 )

    防盗链配置

    location ~* .(gif|png|jpg|swf|flv)$ {
    root html;
    valid_referers none blocked *.tl.com;
    if ($invalid_referer) {
    #rewrite ^/ http://www.tl.com/image/403.png;
    return 404;#这里我们直接返回404
    }
    }
     

    下载限速 
    下载限速:

    location /download {

        limit_rate 1m;//限制1M

        limit_rate_after 30m;//对30m上的数据限制

    }
     

    创建IP黑名单
    # 创建黑名单文件

    # 创建黑名单文件

    echo 'deny 192.168.0.132;' >> balck.ip

    #http 配置块中引入 黑名单文件

    include       black.ip;
     ( 动态创建ip黑名单: https://www.cnblogs.com/wloveh/p/4434919.html  )

    日志配置
    日志格式:

    log_format  main  '$remote_addr - $remote_user [$time_local]   "$request" '

                                 '$status $body_bytes_sent "$http_referer" ''

                                 "$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

    #基于域名打印日志

    access_log logs/$host.access.log main;

    error日志的设置

    语法:error_log /path/file level;

    默认:error_log logs/error.log error;

    level是日志的输出级别,取值范围是debug、info、notice、warn、error、crit、alert、emerg,

    针对指定的客户端输出debug级别的日志

    语法:debug_connection[IP|CIDR]

    events {

    debug_connection 192.168.0.147; 

    debug_connection 10.224.57.0/200;

    }

    日志配置详解  https://blog.csdn.net/biubiuli/article/details/79481882 

  • 相关阅读:
    To select the file to upload we can use the standard HTML input control of type
    Cascading Menu Script using Javascript Explained
    网站首页head区代码规范
    轻松掌握 Java 泛型
    JDK 5.0 中的泛型类型学习
    如何在firefox下获取下列框选中option的text
    是同步方法还是 synchronized 代码? 详解多线程同步规则
    javascript select option对象总结
    Select的动态取值(Text,value),添加,删除。兼容IE,FireFox
    javascript在ie和firefox下的一些差异
  • 原文地址:https://www.cnblogs.com/muhy/p/10528436.html
Copyright © 2011-2022 走看看