worker_processes auto; worker_rlimit_nofile 65535; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 4096; use epoll; multi_accept on; accept_mutex_delay 100ms; } http { limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m; limit_req_zone $binary_remote_addr zone=api_limit:10m rate=6r/s; limit_req_zone $binary_remote_addr zone=auth_limit:10m rate=3r/s; limit_req_zone $binary_remote_addr zone=bot_limit:10m rate=1r/s; limit_req_zone $binary_remote_addr zone=static_limit:10m rate=100r/s; limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=10r/s; map $http_user_agent $limit_bots { default ""; ~*(googlebot|bingbot|yandex|baiduspider) $binary_remote_addr; } limit_req_zone $limit_bots zone=bots:10m rate=20r/m; limit_req_zone $request_method zone=post_limit:10m rate=5r/s; proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=40m use_temp_path=off; include /etc/nginx/mime.types; default_type application/octet-stream; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 75; keepalive_requests 100; types_hash_max_size 2048; server_tokens off; client_max_body_size 10m; client_body_buffer_size 128k; client_body_timeout 12; client_header_timeout 12; send_timeout 30; reset_timedout_connection on; client_header_buffer_size 1k; large_client_header_buffers 4 8k; gzip on; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_types text/plain text/css text/xml application/json application/javascript application/xml+rss application/atom+xml image/svg+xml; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" ' 'rt=$request_time uct="$upstream_connect_time" uht="$upstream_header_time" urt="$upstream_response_time"'; log_format ddos_log '$remote_addr - [$time_local] "$request" $status ' 'rate=$limit_req_status conn=$limit_conn_status ' 'user_agent="$http_user_agent"'; access_log /var/log/nginx/access.log main; error_log /var/log/nginx/error.log warn; limit_req_status 429; limit_conn_status 429; include /etc/nginx/conf.d/*.conf; }