fix(docker):force ngix to resolve upstream names at request time (#2717)
* fix(docker):force ngix to resolve upstream names at request time * fix(docker): set resolver valid=0s to eliminate DNS cache window for request-time re-resolution Agent-Logs-Url: https://github.com/bytedance/deer-flow/sessions/07bdb872-022f-4fd2-9fa8-d800a4ce34a7 Co-authored-by: WillemJiang <219644+WillemJiang@users.noreply.github.com> * Update DNS resolver valid time and add upstreams * fix the unit test error * Remove upstream server configurations from nginx.conf Removed upstream server configurations for gateway and frontend. --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -50,7 +50,7 @@ def test_nginx_routes_official_langgraph_prefix_to_gateway_api():
|
|||||||
assert "/api/langgraph-compat" not in content
|
assert "/api/langgraph-compat" not in content
|
||||||
assert "proxy_pass http://langgraph" not in content
|
assert "proxy_pass http://langgraph" not in content
|
||||||
assert "rewrite ^/api/langgraph/(.*) /api/$1 break;" in content
|
assert "rewrite ^/api/langgraph/(.*) /api/$1 break;" in content
|
||||||
assert "proxy_pass http://gateway" in content
|
assert "proxy_pass http://gateway" in content or "proxy_pass http://$gateway_upstream" in content
|
||||||
|
|
||||||
|
|
||||||
def test_frontend_rewrites_langgraph_prefix_to_gateway():
|
def test_frontend_rewrites_langgraph_prefix_to_gateway():
|
||||||
|
|||||||
+19
-27
@@ -17,25 +17,17 @@ http {
|
|||||||
# Docker internal DNS (for resolving k3s hostname)
|
# Docker internal DNS (for resolving k3s hostname)
|
||||||
resolver 127.0.0.11 valid=10s ipv6=off;
|
resolver 127.0.0.11 valid=10s ipv6=off;
|
||||||
|
|
||||||
# Upstream servers (using Docker service names)
|
|
||||||
# NOTE: `zone` and `resolve` are nginx Plus-only features and are not
|
|
||||||
# available in the standard nginx:alpine image. Docker's internal DNS
|
|
||||||
# (127.0.0.11) handles service discovery; upstreams are resolved at
|
|
||||||
# nginx startup and remain valid for the lifetime of the deployment.
|
|
||||||
upstream gateway {
|
|
||||||
server gateway:8001;
|
|
||||||
}
|
|
||||||
|
|
||||||
upstream frontend {
|
|
||||||
server frontend:3000;
|
|
||||||
}
|
|
||||||
|
|
||||||
# ── Main server (path-based routing) ─────────────────────────────────
|
# ── Main server (path-based routing) ─────────────────────────────────
|
||||||
server {
|
server {
|
||||||
listen 2026 default_server;
|
listen 2026 default_server;
|
||||||
listen [::]:2026 default_server;
|
listen [::]:2026 default_server;
|
||||||
server_name _;
|
server_name _;
|
||||||
|
|
||||||
|
# Resolve Docker service names at request time to avoid stale upstream
|
||||||
|
# IPs when containers restart and receive new addresses.
|
||||||
|
set $gateway_upstream gateway:8001;
|
||||||
|
set $frontend_upstream frontend:3000;
|
||||||
|
|
||||||
# Hide CORS headers from upstream to prevent duplicates
|
# Hide CORS headers from upstream to prevent duplicates
|
||||||
proxy_hide_header 'Access-Control-Allow-Origin';
|
proxy_hide_header 'Access-Control-Allow-Origin';
|
||||||
proxy_hide_header 'Access-Control-Allow-Methods';
|
proxy_hide_header 'Access-Control-Allow-Methods';
|
||||||
@@ -56,7 +48,7 @@ http {
|
|||||||
# Rewrites /api/langgraph/* to /api/* before proxying to Gateway.
|
# Rewrites /api/langgraph/* to /api/* before proxying to Gateway.
|
||||||
location /api/langgraph/ {
|
location /api/langgraph/ {
|
||||||
rewrite ^/api/langgraph/(.*) /api/$1 break;
|
rewrite ^/api/langgraph/(.*) /api/$1 break;
|
||||||
proxy_pass http://gateway;
|
proxy_pass http://$gateway_upstream;
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
|
|
||||||
# Headers
|
# Headers
|
||||||
@@ -82,7 +74,7 @@ http {
|
|||||||
|
|
||||||
# Custom API: Models endpoint
|
# Custom API: Models endpoint
|
||||||
location /api/models {
|
location /api/models {
|
||||||
proxy_pass http://gateway;
|
proxy_pass http://$gateway_upstream;
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
@@ -92,7 +84,7 @@ http {
|
|||||||
|
|
||||||
# Custom API: Memory endpoint
|
# Custom API: Memory endpoint
|
||||||
location /api/memory {
|
location /api/memory {
|
||||||
proxy_pass http://gateway;
|
proxy_pass http://$gateway_upstream;
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
@@ -102,7 +94,7 @@ http {
|
|||||||
|
|
||||||
# Custom API: MCP configuration endpoint
|
# Custom API: MCP configuration endpoint
|
||||||
location /api/mcp {
|
location /api/mcp {
|
||||||
proxy_pass http://gateway;
|
proxy_pass http://$gateway_upstream;
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
@@ -112,7 +104,7 @@ http {
|
|||||||
|
|
||||||
# Custom API: Skills configuration endpoint
|
# Custom API: Skills configuration endpoint
|
||||||
location /api/skills {
|
location /api/skills {
|
||||||
proxy_pass http://gateway;
|
proxy_pass http://$gateway_upstream;
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
@@ -122,7 +114,7 @@ http {
|
|||||||
|
|
||||||
# Custom API: Agents endpoint
|
# Custom API: Agents endpoint
|
||||||
location /api/agents {
|
location /api/agents {
|
||||||
proxy_pass http://gateway;
|
proxy_pass http://$gateway_upstream;
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
@@ -132,7 +124,7 @@ http {
|
|||||||
|
|
||||||
# Custom API: Uploads endpoint
|
# Custom API: Uploads endpoint
|
||||||
location ~ ^/api/threads/[^/]+/uploads {
|
location ~ ^/api/threads/[^/]+/uploads {
|
||||||
proxy_pass http://gateway;
|
proxy_pass http://$gateway_upstream;
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
@@ -146,7 +138,7 @@ http {
|
|||||||
|
|
||||||
# Custom API: Other endpoints under /api/threads
|
# Custom API: Other endpoints under /api/threads
|
||||||
location ~ ^/api/threads {
|
location ~ ^/api/threads {
|
||||||
proxy_pass http://gateway;
|
proxy_pass http://$gateway_upstream;
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
@@ -156,7 +148,7 @@ http {
|
|||||||
|
|
||||||
# API Documentation: Swagger UI
|
# API Documentation: Swagger UI
|
||||||
location /docs {
|
location /docs {
|
||||||
proxy_pass http://gateway;
|
proxy_pass http://$gateway_upstream;
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
@@ -166,7 +158,7 @@ http {
|
|||||||
|
|
||||||
# API Documentation: ReDoc
|
# API Documentation: ReDoc
|
||||||
location /redoc {
|
location /redoc {
|
||||||
proxy_pass http://gateway;
|
proxy_pass http://$gateway_upstream;
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
@@ -176,7 +168,7 @@ http {
|
|||||||
|
|
||||||
# API Documentation: OpenAPI Schema
|
# API Documentation: OpenAPI Schema
|
||||||
location /openapi.json {
|
location /openapi.json {
|
||||||
proxy_pass http://gateway;
|
proxy_pass http://$gateway_upstream;
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
@@ -186,7 +178,7 @@ http {
|
|||||||
|
|
||||||
# Health check endpoint (gateway)
|
# Health check endpoint (gateway)
|
||||||
location /health {
|
location /health {
|
||||||
proxy_pass http://gateway;
|
proxy_pass http://$gateway_upstream;
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
@@ -210,7 +202,7 @@ http {
|
|||||||
# Catch-all for /api/ routes not covered above (e.g. /api/v1/auth/*).
|
# Catch-all for /api/ routes not covered above (e.g. /api/v1/auth/*).
|
||||||
# More specific prefix and regex locations above still take precedence.
|
# More specific prefix and regex locations above still take precedence.
|
||||||
location /api/ {
|
location /api/ {
|
||||||
proxy_pass http://gateway;
|
proxy_pass http://$gateway_upstream;
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
@@ -220,7 +212,7 @@ http {
|
|||||||
|
|
||||||
# All other requests go to frontend
|
# All other requests go to frontend
|
||||||
location / {
|
location / {
|
||||||
proxy_pass http://frontend;
|
proxy_pass http://$frontend_upstream;
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
|
|
||||||
# Headers
|
# Headers
|
||||||
|
|||||||
Reference in New Issue
Block a user