limit_req_zone $binary_remote_addr zone=rpc_per_ip:10m rate=10r/s; upstream anvil_rpc { server anvil:8545; keepalive 16; } server { listen 80; server_name _; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log warn; location = /healthz { access_log off; return 200 "ok\n"; } location / { if ($request_method = OPTIONS) { add_header Access-Control-Allow-Origin "*" always; add_header Access-Control-Allow-Methods "POST, OPTIONS" always; add_header Access-Control-Allow-Headers "content-type" always; add_header Access-Control-Max-Age 86400 always; return 204; } limit_req zone=rpc_per_ip burst=20 nodelay; limit_except POST { deny all; } proxy_http_version 1.1; proxy_set_header Connection ""; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 60s; proxy_send_timeout 60s; add_header Access-Control-Allow-Origin "*" always; proxy_pass http://anvil_rpc; } }