-
Notifications
You must be signed in to change notification settings - Fork 21
use nginx for handling and proxy request to API and Web UI #15
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
📝 WalkthroughWalkthroughThe changes introduce an nginx reverse proxy service in the Docker Compose configuration to centralize traffic routing. Direct port mappings for swetrix and swetrix-api are removed, and the nginx service handles port 80, forwarding requests to backend services via updated proxy configurations that consolidate previous routing logic into a single server block. Changes
Sequence DiagramsequenceDiagram
participant Client
participant nginx as nginx-proxy<br/>(port 80)
participant api as swetrix-api<br/>(port 5005)
participant app as swetrix<br/>(port 3000)
Client->>nginx: HTTP request (port 80)
rect rgb(200, 220, 240)
Note over nginx: Route Decision
alt /api/* path
nginx->>api: proxy_pass to :5005<br/>(HTTP/1.1)
api-->>nginx: response
else / path (app)
nginx->>app: proxy_pass to :3000<br/>(HTTP/1.1)
app-->>nginx: response
end
end
nginx-->>Client: HTTP response
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Poem
Pre-merge checks✅ Passed checks (3 passed)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
Fix all issues with AI Agents 🤖
In @nginx/config:
- Around line 6-12: The /api/ location block is missing several proxy headers
and operational directives; inside the location /api/ block add proxy_set_header
X-Forwarded-Proto $scheme and proxy_set_header Upgrade $http_upgrade along with
proxy_set_header Connection $connection_upgrade (and ensure you add the
top-level map $http_upgrade -> $connection_upgrade if WebSocket support is
required), and also add client_max_body_size with an appropriate limit plus
timeout directives proxy_connect_timeout, proxy_send_timeout, and
proxy_read_timeout to make the proxy resilient.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
nginx/config (1)
14-20: Add missing proxy headers and consider operational directives.The root location has the same gaps as the /api/ location:
Major concerns:
- X-Forwarded-Proto header missing (critical for HTTPS setups)
- Connection and Upgrade headers missing (required if the frontend uses WebSockets for real-time updates)
Recommended improvements:
- Add client_max_body_size directive
- Add timeout configurations for better reliability
🔎 Proposed enhancements
location / { proxy_pass http://swetrix:3000; proxy_http_version 1.1; 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; + proxy_set_header X-Forwarded-Host $host; + + # WebSocket support (if needed) + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + + # Operational settings + client_max_body_size 10M; + proxy_connect_timeout 60s; + proxy_send_timeout 60s; + proxy_read_timeout 60s; }
🧹 Nitpick comments (2)
compose.yaml (2)
117-119: Replace deprecatedlinkswithdepends_on.The
linksdirective is deprecated in Docker Compose v2+. Usedepends_oninstead for service dependencies, which provides the same networking functionality with clearer semantics.🔎 Proposed refactor
nginx-proxy: image: nginx:1.29.4-alpine restart: always - links: - - "swetrix-api" - - "swetrix" + depends_on: + swetrix: + condition: service_healthy + swetrix-api: + condition: service_healthy ports: - "80:80"
114-123: Consider adding a health check for the nginx-proxy service.Adding a health check improves service orchestration and enables better monitoring of the reverse proxy.
🔎 Proposed enhancement
nginx-proxy: image: nginx:1.29.4-alpine restart: always links: - "swetrix-api" - "swetrix" ports: - "80:80" volumes: - ./nginx/config:/etc/nginx/conf.d/default.conf + healthcheck: + test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:80/ || exit 1"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 10s
📜 Review details
Configuration used: defaults
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
compose.yamlnginx/config
🔇 Additional comments (3)
nginx/config (1)
2-3: LGTM! Standard listen configuration.The IPv4 and IPv6 listen directives on port 80 are correctly configured for the single-domain architecture.
compose.yaml (2)
9-9: LGTM! API_URL correctly configured for single-domain setup.The hardcoded
/apivalue aligns with the nginx routing configuration that proxies/api/requests to the backend API service.
115-115: No action required. The image versionnginx:1.29.4-alpineis valid—nginx 1.29.4 (mainline) was released on December 9, 2025. If using a mainline release in production is a concern, consider pinning to the latest stable version (1.28.1 as of January 2026) instead, but the current version specification itself is not invalid.
| location /api/ { | ||
| proxy_pass http://swetrix-api:5005/; | ||
| proxy_http_version 1.1; | ||
| proxy_set_header Host $host; | ||
| proxy_set_header X-Real-IP $remote_addr; | ||
| proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add missing proxy headers and consider operational directives.
The /api/ location is missing several important proxy headers and operational configurations:
Major concerns:
- X-Forwarded-Proto header is missing, which is critical for HTTPS awareness if SSL termination is added in the future (e.g., behind a load balancer or when adding TLS)
- Connection and Upgrade headers are missing, which are required for WebSocket support—verify whether the API uses WebSockets for real-time features
Recommended improvements:
- Add client_max_body_size directive to control upload limits (prevents large payload attacks)
- Add timeout configurations (proxy_connect_timeout, proxy_send_timeout, proxy_read_timeout) for better resilience
🔎 Proposed enhancements
location /api/ {
proxy_pass http://swetrix-api:5005/;
proxy_http_version 1.1;
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;
+ proxy_set_header X-Forwarded-Host $host;
+
+ # WebSocket support (if needed)
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection $connection_upgrade;
+
+ # Operational settings
+ client_max_body_size 10M;
+ proxy_connect_timeout 60s;
+ proxy_send_timeout 60s;
+ proxy_read_timeout 60s;
}If WebSocket support is needed, also add this map directive at the top level (outside server block):
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}🤖 Prompt for AI Agents
In @nginx/config around lines 6-12, The /api/ location block is missing several
proxy headers and operational directives; inside the location /api/ block add
proxy_set_header X-Forwarded-Proto $scheme and proxy_set_header Upgrade
$http_upgrade along with proxy_set_header Connection $connection_upgrade (and
ensure you add the top-level map $http_upgrade -> $connection_upgrade if
WebSocket support is required), and also add client_max_body_size with an
appropriate limit plus timeout directives proxy_connect_timeout,
proxy_send_timeout, and proxy_read_timeout to make the proxy resilient.
|
wow that look fantastic! thanks for the PR, will be merged before the v5 release soon! |
This fix issue Swetrix/swetrix#460, by using nginx to proxy request then forward to either API or FE. It help Swetrix can be deploy on single domain with API is on
/api/instead of separate domainSummary by CodeRabbit
Release Notes
✏️ Tip: You can customize this high-level summary in your review settings.