From 61d126e92337cef906742373332170069c3478c4 Mon Sep 17 00:00:00 2001 From: Ayden Jahola Date: Mon, 20 Apr 2026 14:35:01 +0100 Subject: [PATCH] change nginx config to show real ip and limit crawlers spam --- jobs/services/wiki/mediawiki.hcl | 178 +++++++++++++++++++++++++------ 1 file changed, 145 insertions(+), 33 deletions(-) diff --git a/jobs/services/wiki/mediawiki.hcl b/jobs/services/wiki/mediawiki.hcl index 3849e01..38cd62e 100644 --- a/jobs/services/wiki/mediawiki.hcl +++ b/jobs/services/wiki/mediawiki.hcl @@ -39,11 +39,27 @@ job "mediawiki" { "traefik.http.routers.rbwiki.rule=Host(`${NOMAD_META_domain}`) || Host(`wiki.rb.dcu.ie`)", "traefik.http.routers.rbwiki.entrypoints=web,websecure", "traefik.http.routers.rbwiki.tls.certresolver=rb", - "traefik.http.routers.rbwiki.middlewares=rbwiki-redirect-root, rbwiki-redirect-mw", + + # attach all middlewares to the router + "traefik.http.routers.rbwiki.middlewares=rbwiki-ratelimit,rbwiki-inflight,rbwiki-redirect-root,rbwiki-redirect-mw", + + # redirects "traefik.http.middlewares.rbwiki-redirect-root.redirectregex.regex=^https://wiki\\.redbrick\\.dcu\\.ie/?$", "traefik.http.middlewares.rbwiki-redirect-root.redirectregex.replacement=https://wiki.redbrick.dcu.ie/Main_Page", "traefik.http.middlewares.rbwiki-redirect-mw.redirectregex.regex=https://wiki\\.redbrick\\.dcu\\.ie/Mw/(.*)", "traefik.http.middlewares.rbwiki-redirect-mw.redirectregex.replacement=https://wiki.redbrick.dcu.ie/$1", + + # per-client rate limit + "traefik.http.middlewares.rbwiki-ratelimit.ratelimit.average=20", + "traefik.http.middlewares.rbwiki-ratelimit.ratelimit.period=1s", + "traefik.http.middlewares.rbwiki-ratelimit.ratelimit.burst=40", + + # group requests by client IP + "traefik.http.middlewares.rbwiki-ratelimit.ratelimit.sourcecriterion.ipstrategy.depth=1", + + # cap concurrent requests per client IP + "traefik.http.middlewares.rbwiki-inflight.inflightreq.amount=10", + "traefik.http.middlewares.rbwiki-inflight.inflightreq.sourcecriterion.ipstrategy.depth=1", ] } @@ -69,52 +85,148 @@ job "mediawiki" { data = <