From 56be8730079181a263bfc4ede0a1f17c2e781e34 Mon Sep 17 00:00:00 2001 From: Gunshiz Date: Thu, 28 May 2026 22:06:42 +0700 Subject: [PATCH] feat: add Nginx reverse proxy service with rate limiting to docker-compose configuration --- docker-compose.yml | 15 +++++++++++++-- nginx.conf | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 nginx.conf diff --git a/docker-compose.yml b/docker-compose.yml index 32bfc3c..eaef8ce 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,6 +1,17 @@ services: erika: build: . - ports: - - "8606:3000" + expose: + - "3000" + restart: unless-stopped + + nginx: + image: nginx:alpine + container_name: erika-nginx + ports: + - "8606:80" + volumes: + - ./nginx.conf:/etc/nginx/nginx.conf:ro + depends_on: + - erika restart: unless-stopped diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 0000000..4af4cf9 --- /dev/null +++ b/nginx.conf @@ -0,0 +1,37 @@ +worker_processes auto; + +events { + worker_connections 1024; +} + +http { + # Enable logging to see what's happening + error_log /dev/stderr warn; + access_log /dev/stdout; + + # Define rate limit zone: 10MB memory, 5 requests per second per IP + limit_req_zone $binary_remote_addr zone=ratelimit:10m rate=5r/s; + + server { + listen 80; + + location / { + # Apply rate limit: allow burst of up to 10 requests without delay + limit_req zone=ratelimit burst=10 nodelay; + + # Proxy to the Next.js app + proxy_pass http://erika:3000; + + # Next.js often requires HTTP/1.1 + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + + # Forward headers + 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; + } + } +}