diff --git a/Caddyfile b/Caddyfile index 389dadf..5cfc05d 100644 --- a/Caddyfile +++ b/Caddyfile @@ -1,7 +1,13 @@ https://localhost:443 root * /usr/share/caddy -reverse_proxy /api/* http://server:8080 +route /api/* { + # global rate limit + rate_limit {host} 100r/m + # rate limit per "client" + rate_limit {remote.host} 25r/m + reverse_proxy http://server:8080 +} encode gzip file_server { precompressed br diff --git a/fastreach-ui/src/lib/IsochroneConfig.svelte b/fastreach-ui/src/lib/IsochroneConfig.svelte index e3a59a3..9bcc183 100644 --- a/fastreach-ui/src/lib/IsochroneConfig.svelte +++ b/fastreach-ui/src/lib/IsochroneConfig.svelte @@ -53,7 +53,11 @@ }); if (res.status !== 200) { - error = `HTTP request failed, status code: ${res.status}`; + if (res.status === 429) { + error = "Please try again later."; + } else { + error = `HTTP request failed, status code: ${res.status}.`; + } return; } const result = (await res.json()) as IsochroneResponse; diff --git a/ui.Dockerfile b/ui.Dockerfile index 40ec6e3..5a6902b 100644 --- a/ui.Dockerfile +++ b/ui.Dockerfile @@ -1,7 +1,11 @@ -FROM node:18-alpine as build +FROM node:18-alpine as ui-build WORKDIR /app/fastreach-ui COPY . /app RUN npm install && npm run build +FROM caddy:2.7-builder-alpine AS caddy-build +RUN xcaddy build --with github.com/RussellLuo/caddy-ext/ratelimit + FROM caddy:2.7-alpine -COPY --from=build /app/fastreach-ui/dist /usr/share/caddy +COPY --from=caddy-build /usr/bin/caddy /usr/bin/caddy +COPY --from=ui-build /app/fastreach-ui/dist /usr/share/caddy