HTTP接入层限流

阅读更多
http {
    include       mime.types;
    default_type  application/octet-stream;

    #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;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

        limit_req_status 509;
        limit_conn_status 509;
        limit_conn_zone  $server_addr zone=one:10m;  #按域来限流
        limit_req_zone  $server_addr  zone=req_one:10m rate=2r/s;



server{

        limit_conn  one 2;
        limit_req   zone=req_one nodelay;


        listen 22019;
        access_log /opt/nginx/logs/limit_access.log;
        location / {
                proxy_pass  http://www.baidu.com;

        }

        error_page   509  /509.html;
        location = /509.html {
           root   html;
        }

}

}

关键指令解析:
limit_req_status 指http被限流时的错误码,默认是503
limit_conn_status 指tcp被限流时的错误码,默认是503
limit_req,该指令对Http请求进行限流也就是限并发数,如果burst属性没配置表示不进行http请求缓冲,直接被限流返回
limit_conn,该指令限制tcp连接数,真正服务要不要请求HTTP请求是靠这个指令

准确的说,尽管你配置的limit_req并发数在多,服务真正能不能处理还是靠这个limit_conn配置的数字

比如:limit_req对应的配置是 100 rate/s,表示每秒允许的http请求并发数是100
limit_conn对应的配置是 10,表示服务每秒能同时处理10请求,也就是指这个服务的tps

用户可以无限的发送http请求,但是真正同时被处理的也就10个请求


你可能感兴趣的:(HTTP接入层限流)