欢迎光临散文网 会员登陆 & 注册

小白站长cdn被刷量!服务器被四层ddos!cdn配合nginx精细化限速解决!

2023-07-08 15:12 作者:夜雨彩虹_  | 我要投稿
配置说明 
...

http {
# 日志记录tcp三次握手的$remote_addr
# 记录x-real-ip
# 记录x-forward-ip 用户的真实ip一定在其中
    log_format access '$remote_addr $server_port - $http_host [$time_local] '
                      '"$request" $status $body_bytes_sent '
                      '"$http_referer" "$http_user_agent" '
                      '$http_x_forwarded_for|$http_x_real_ip|$limit_key';
    access_log /dev/stdout access;
#添加白名单
    geo $limit {
        default 1;
        192.168.0.0/24 0;
        10.0.0.0/8 0;
        127.0.0.0/8 0;
        43.132.198.237/32 0;
    }
# 先匹配x-forwarded-for中的ip,没匹配到则用remote_addr作为用户ip
    map $http_x_forwarded_for $real_ip {
        default         $remote_addr;
        "~^(?P<ip>[^,]+)" $ip;
    }
# 白名单不限速
    map $limit $limit_key {
        0 "";
        1 $real_ip;
    }

# 限制每个ip请求频率
    limit_req_zone $limit_key zone=req_ip:10m rate=5r/s;
# 限制整个服务的请求频率
    limit_req_zone $server_name zone=req_svr:1m rate=50r/s;
# 超限断开连接
    limit_req_status 444;
# 限制单ip并发连接
    limit_conn_zone $limit_key zone=con_ip:10m;

    server {
# 配置解析dns
        resolver kube-dns.kube-system.svc.cluster.local ipv6=off;
# 配置ssl
        listen 443 ssl;
        ssl_certificate /app/cert.pem;
        ssl_certificate_key /app/cert.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;
# 配置证书过期验证在服务器上验证
        ssl_stapling on;
        ssl_stapling_verify on;
# 开启gzip压缩,节省流量
        gzip on;
        gzip_types *;
        gzip_comp_level 6;
        gzip_min_length 256;
        gzip_buffers 16 8k;
        gzip_proxied any;
        gzip_vary on;
        gzip_disable "MSIE [1-6]\.(?!.*SV1)";

# 配置服务匹配的域名
        server_name www.dk8s.com;
        server_name www.dk8s.cn;

# 限制每个链接的下载速率
        limit_rate 100k;
        limit_rate_after 1m;
# 限制单ip的并发连接数
        limit_conn con_ip 40;

        location / {
# 限制单ip的突发为100,排队长度为200
            limit_req zone=req_ip burst=100 delay=200;
# 限制服务的突发为1000,排队长度为2000
            limit_req zone=req_svr burst=1000 delay=2000;
# 传递host
            proxy_set_header Host $host;
# 请求ip作为x-real-ip
            proxy_set_header X-Real-IP $remote_addr;
# 追加nginx的ip到x-forward-for中
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 传递请求协议
            proxy_set_header X-Forwarded-Proto $scheme;
# 传递到后端服务
            proxy_pass http://dk8s-web-svc.default.svc.cluster.local:80;
        }

        location /public/pkg/ {
# 限制客户端下载并发为2
            limit_conn con_ip 2;
            limit_req zone=req_ip burst=10;
            limit_req zone=req_svr burst=100;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_pass http://dk8s-res-svc.default.svc.cluster.local:5000/pkg/;
        }
        ...
    }
...
}

}

小白站长cdn被刷量!服务器被四层ddos!cdn配合nginx精细化限速解决!的评论 (共 条)

分享到微博请遵守国家法律