2 files changed
+45
-2
No files matched your search
@@ -45,6 +45,8 @@ curl -H "X-Proxy-Token: YOUR_SECRET" http://localhost:8080/elevenlabs/v1/voices
|
|||||||
| /elevenlabs/ | https://api.elevenlabs.io |
|
| /elevenlabs/ | https://api.elevenlabs.io |
|
||||||
| /openai/ | https://api.openai.com |
|
| /openai/ | https://api.openai.com |
|
||||||
| /telegram/ | https://api.telegram.org |
|
| /telegram/ | https://api.telegram.org |
|
||||||
|
| /openrouter/ | https://openrouter.ai/api/v1|
|
||||||
|
| /deepseek/ | https://api.deepseek.com |
|
||||||
| /health | local health check (no auth)|
|
| /health | local health check (no auth)|
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -203,6 +205,6 @@ docker inspect --format='{{.State.Health.Status}}' api-proxy
|
|||||||
|
|
||||||
1. A k8s pod sends an HTTP request to `http://<proxy-vm>:8080/elevenlabs/v1/text-to-speech/...` with the `X-Proxy-Token` header and the original API key.
|
1. A k8s pod sends an HTTP request to `http://<proxy-vm>:8080/elevenlabs/v1/text-to-speech/...` with the `X-Proxy-Token` header and the original API key.
|
||||||
2. Nginx checks the source IP against `ALLOWED_CIDR` and validates `X-Proxy-Token` — rejecting with 403 if either fails.
|
2. Nginx checks the source IP against `ALLOWED_CIDR` and validates `X-Proxy-Token` — rejecting with 403 if either fails.
|
||||||
3. The prefix (`/elevenlabs/`, `/openai/`, `/telegram/`) is stripped via rewrite, and the request is forwarded over HTTPS to the upstream with SNI enabled.
|
3. The prefix (`/elevenlabs/`, `/openai/`, `/telegram/`, `/openrouter/`, `/deepseek/`) is stripped via rewrite, and the request is forwarded over HTTPS to the upstream with SNI enabled.
|
||||||
4. `X-Proxy-Token` and all IP-leaking headers are removed before forwarding; API keys pass through unchanged.
|
4. `X-Proxy-Token` and all IP-leaking headers are removed before forwarding; API keys pass through unchanged.
|
||||||
5. The response streams back unbuffered to the pod — critical for binary audio data and long-polling (Telegram).
|
5. The response streams back unbuffered to the pod — critical for binary audio data and long-polling (Telegram).
|
||||||
+42
-1
@@ -156,8 +156,49 @@ location /openrouter/ {
|
|||||||
proxy_send_timeout 120s;
|
proxy_send_timeout 120s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# --- DeepSeek ---
|
||||||
|
location /deepseek/ {
|
||||||
|
if ($allowed_ip = 0) {
|
||||||
|
return 403 '{"error":"ip_not_allowed"}';
|
||||||
|
}
|
||||||
|
if ($auth_ok = 0) {
|
||||||
|
return 403 '{"error":"invalid_token"}';
|
||||||
|
}
|
||||||
|
|
||||||
|
set $deepseek_upstream https://api.deepseek.com;
|
||||||
|
rewrite ^/deepseek/(.*) /$1 break;
|
||||||
|
|
||||||
|
proxy_pass $deepseek_upstream;
|
||||||
|
proxy_ssl_server_name on;
|
||||||
|
proxy_ssl_name api.deepseek.com;
|
||||||
|
proxy_ssl_protocols TLSv1.2 TLSv1.3;
|
||||||
|
|
||||||
|
proxy_set_header Host api.deepseek.com;
|
||||||
|
proxy_set_header Connection "";
|
||||||
|
|
||||||
|
proxy_set_header X-Forwarded-For "";
|
||||||
|
proxy_set_header X-Real-IP "";
|
||||||
|
proxy_set_header True-Client-IP "";
|
||||||
|
proxy_set_header CF-Connecting-IP "";
|
||||||
|
proxy_set_header X-Client-IP "";
|
||||||
|
proxy_set_header Forwarded "";
|
||||||
|
proxy_set_header Via "";
|
||||||
|
|
||||||
|
proxy_set_header X-Proxy-Token "";
|
||||||
|
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_buffering off;
|
||||||
|
proxy_request_buffering off;
|
||||||
|
proxy_buffer_size 16k;
|
||||||
|
proxy_buffers 4 16k;
|
||||||
|
proxy_busy_buffers_size 32k;
|
||||||
|
proxy_connect_timeout 15s;
|
||||||
|
proxy_read_timeout 300s;
|
||||||
|
proxy_send_timeout 120s;
|
||||||
|
}
|
||||||
|
|
||||||
# --- Catch-all ---
|
# --- Catch-all ---
|
||||||
location / {
|
location / {
|
||||||
default_type application/json;
|
default_type application/json;
|
||||||
return 404 '{"error":"unknown_upstream","hint":"use /elevenlabs/, /openai/ or /telegram/ or /openrouter/"}';
|
return 404 '{"error":"unknown_upstream","hint":"use /elevenlabs/, /openai/, /telegram/, /openrouter/ or /deepseek/"}';
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user