configure-reverse-proxy
À propos
Cette compétence configure des installations de proxy inverse en utilisant des outils tels que Nginx, Traefik et ShinyProxy pour acheminer plusieurs services via un point d'entrée unique. Elle gère le proxy pour WebSocket, le routage basé sur le chemin ou l'hôte, la terminaison SSL et la découverte automatique des labels Docker. Utilisez-la lorsque vous avez besoin de proxyfier des connexions WebSocket, de découvrir automatiquement les services Docker ou d'ajouter SSL à des services ne disposant pas de support TLS natif.
Installation rapide
Claude Code
Recommandénpx skills add pjt222/agent-almanac -a claude-code/plugin add https://github.com/pjt222/agent-almanacgit clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/configure-reverse-proxyCopiez et collez cette commande dans Claude Code pour installer cette compétence
Documentation
name: configure-reverse-proxy description: > Konfiguriere Reverse-Proxy-Muster mit verschiedenen Tools einschliesslich Nginx, Traefik und ShinyProxy. Umfasst WebSocket-Proxying, pfadbasiertes und hostbasiertes Routing, SSL-Terminierung und Docker-Label-Auto-Discovery. Verwende diesen Skill beim Routing mehrerer Dienste hinter einem einzigen Einstiegspunkt, beim Proxying von WebSocket-Verbindungen (Shiny, Socket.IO), bei Auto-Discovery von Docker-Diensten mit Traefik-Labels oder beim Hinzufuegen von SSL-Terminierung zu Diensten, die TLS nicht nativ unterstuetzen. license: MIT allowed-tools: Read Write Edit Bash Grep Glob metadata: author: Philipp Thoss version: "1.0" domain: containerization complexity: intermediate language: multi tags: reverse-proxy, traefik, nginx, websocket, routing, shinyproxy, ssl locale: de source_locale: en source_commit: 6f65f316 translator: claude-sonnet-4-6 translation_date: 2026-03-16
Reverse Proxy konfigurieren
Reverse-Proxy-Muster fuer das Routing von Traffic zu Backend-Diensten mit Nginx, Traefik oder ShinyProxy einrichten.
Wann verwenden
- Routing mehrerer Dienste hinter einem einzigen Einstiegspunkt
- Proxying von WebSocket-Verbindungen (Shiny, Socket.IO, Live Reload)
- Auto-Discovery von Docker-Diensten mit Traefik-Labels
- Pfadbasiertes oder hostbasiertes Routing zu verschiedenen Backends
- SSL-Terminierung fuer Dienste hinzufuegen, die TLS nicht unterstuetzen
Eingaben
- Erforderlich: Backend-Dienste zum Proxying (Host:Port)
- Erforderlich: Routing-Strategie (pfadbasiert, hostbasiert oder beides)
- Optional: Proxy-Tool-Praeferenz (Nginx, Traefik)
- Optional: Domainname(n) fuer hostbasiertes Routing
- Optional: WebSocket-Endpunkte zum Proxying
Vorgehensweise
Schritt 1: Proxy-Tool waehlen
| Funktion | Nginx | Traefik |
|---|---|---|
| Konfiguration | Statische Dateien | Docker-Labels / dynamisch |
| Auto-Discovery | Nein (manuell) | Ja (Docker-Provider) |
| Let's Encrypt | Ueber certbot | Eingebautes ACME |
| Dashboard | Nein (Drittanbieter) | Eingebaut |
| WebSocket | Manuelle Konfiguration | Automatisch |
| Geeignet fuer | Statische Konfiguration, hoher Traffic | Dynamische Docker-Umgebungen |
Schritt 2: Nginx -- Pfadbasiertes Routing
server {
listen 80;
location /api/ {
proxy_pass http://api:8000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /app/ {
proxy_pass http://webapp:3000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location / {
root /usr/share/nginx/html;
try_files $uri $uri/ /index.html;
}
}
Hinweis: Ein abschliessender / bei proxy_pass entfernt das Location-Praefix. proxy_pass http://api:8000/; mit location /api/ leitet /api/users als /users weiter.
Schritt 3: Nginx -- Hostbasiertes Routing
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://api:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://webapp:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Schritt 4: Nginx -- WebSocket-Proxying
WebSockets erfordern Upgrade-Header. Wesentlich fuer Shiny, Socket.IO und Live Reload:
location /ws/ {
proxy_pass http://app:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_read_timeout 86400;
}
Speziell fuer Shiny-Apps:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
location / {
proxy_pass http://shiny:3838;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_read_timeout 86400;
proxy_buffering off;
}
}
Erwartet: WebSocket-Verbindungen werden aufgebaut und bestehen fort.
Bei Fehler: Pruefen, ob proxy_http_version 1.1 gesetzt ist. Upgrade- und Connection-Header ueberpruefen.
Schritt 5: Traefik -- Docker-Label-Auto-Discovery
docker-compose.yml:
services:
traefik:
image: traefik:v3.2
command:
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "[email protected]"
- "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
- "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web"
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- letsencrypt:/letsencrypt
api:
image: myapi:latest
labels:
- "traefik.enable=true"
- "traefik.http.routers.api.rule=Host(`api.example.com`)"
- "traefik.http.routers.api.entrypoints=websecure"
- "traefik.http.routers.api.tls.certresolver=letsencrypt"
- "traefik.http.services.api.loadbalancer.server.port=8000"
webapp:
image: myapp:latest
labels:
- "traefik.enable=true"
- "traefik.http.routers.webapp.rule=Host(`app.example.com`)"
- "traefik.http.routers.webapp.entrypoints=websecure"
- "traefik.http.routers.webapp.tls.certresolver=letsencrypt"
- "traefik.http.services.webapp.loadbalancer.server.port=3000"
volumes:
letsencrypt:
Erwartet: Traefik entdeckt Dienste automatisch ueber Labels und stellt SSL-Zertifikate bereit.
Schritt 6: Traefik -- Pfadbasiertes Routing mit Labels
services:
api:
labels:
- "traefik.enable=true"
- "traefik.http.routers.api.rule=Host(`example.com`) && PathPrefix(`/api`)"
- "traefik.http.routers.api.middlewares=strip-api"
- "traefik.http.middlewares.strip-api.stripprefix.prefixes=/api"
- "traefik.http.services.api.loadbalancer.server.port=8000"
Schritt 7: Traefik -- Rate Limiting und Header
labels:
- "traefik.http.middlewares.ratelimit.ratelimit.average=100"
- "traefik.http.middlewares.ratelimit.ratelimit.burst=50"
- "traefik.http.middlewares.security.headers.stsSeconds=63072000"
- "traefik.http.middlewares.security.headers.contentTypeNosniff=true"
- "traefik.http.middlewares.security.headers.frameDeny=true"
- "traefik.http.routers.app.middlewares=ratelimit,security"
Schritt 8: Proxy-Konfiguration ueberpruefen
# Nginx: Konfiguration testen
docker compose exec nginx nginx -t
# Routing pruefen
curl -H "Host: api.example.com" http://localhost/health
# WebSocket pruefen (benoetigt wscat: npm install -g wscat)
wscat -c ws://localhost/ws/
# Traefik-Dashboard (falls aktiviert)
# http://localhost:8080/dashboard/
Erwartet: Anfragen werden an die richtigen Backends geroutet. WebSocket-Upgrades sind erfolgreich.
Validierung
- HTTP-Anfragen werden basierend auf Pfad oder Host an das richtige Backend geroutet
- WebSocket-Verbindungen werden aufgebaut und aufrechterhalten
- SSL-Terminierung funktioniert (falls konfiguriert)
- Backend-Dienste erhalten korrekte
Host-,X-Real-IP-,X-Forwarded-For-Header - Traefik entdeckt neue Dienste automatisch ueber Labels (bei Verwendung von Traefik)
- Konfiguration uebersteht
docker compose restart
Haeufige Fehler
- Abschliessender Schraegstrich stimmt nicht ueberein:
proxy_pass http://app/vshttp://appverhaelt sich bei Pfad-Stripping in Nginx unterschiedlich. - WebSocket-Timeout: Standard
proxy_read_timeoutist 60s. Langlebige WebSocket-Verbindungen benoetigen86400(24h). - Docker-Socket-Sicherheit: Das Mounten von
/var/run/docker.sockin Traefik gibt vollen Docker-Zugriff.ro-Mount verwenden und Socket-Proxy in Betracht ziehen. - DNS-Aufloesung: Nginx loest Upstreams beim Start auf.
resolver 127.0.0.11fuer Dockers internen DNS bei dynamischen Diensten verwenden. - Fehlende
proxy_buffering off: Shiny- und SSE-Endpunkte benoetigenproxy_buffering offfuer Echtzeit-Streaming.
Verwandte Skills
configure-nginx- Detaillierte Nginx-Konfiguration mit SSL und Sicherheitsheaderndeploy-shinyproxy- ShinyProxy fuer containerisiertes Shiny-App-Hostingsetup-compose-stack- Compose-Stack mit Reverse Proxyconfigure-api-gateway- API-Gateway-Muster mit Kong und Traefik
Dépôt GitHub
Compétences associées
content-collections
MétaCette compétence propose une configuration éprouvée en production pour Content Collections, un outil axé sur TypeScript qui transforme des fichiers Markdown/MDX en collections de données typées de manière sûre avec une validation Zod. Utilisez-la lors de la création de blogs, de sites de documentation ou d'applications Vite + React riches en contenu pour garantir la sécurité de typage et la validation automatique du contenu. Elle couvre tout, de la configuration du plugin Vite et de la compilation MDX à l'optimisation des déploiements et la validation des schémas.
polymarket
MétaCette compétence permet aux développeurs de créer des applications avec la plateforme de marchés prédictifs Polymarket, incluant l'intégration d'API pour le trading et les données de marché. Elle fournit également une diffusion de données en temps réel via WebSocket pour surveiller les transactions en direct et l'activité du marché. Utilisez-la pour mettre en œuvre des stratégies de trading ou pour créer des outils traitant les mises à jour de marché en direct.
creating-opencode-plugins
MétaCette compétence aide les développeurs à créer des plugins OpenCode qui s'interconnectent avec plus de 25 types d'événements tels que les commandes, les fichiers et les opérations LSP. Elle fournit la structure du plugin, les spécifications de l'API événementielle et les modèles d'implémentation pour les modules JavaScript/TypeScript. Utilisez-la lorsque vous avez besoin d'intercepter, de surveiller ou d'étendre le cycle de vie de l'assistant IA OpenCode avec une logique personnalisée pilotée par les événements.
sglang
MétaSGLang est un framework de service LLM haute performance spécialisé dans la génération rapide et structurée pour les workflows JSON, regex et agentiques grâce à son cache de préfixe RadixAttention. Il offre une inférence nettement plus rapide, particulièrement pour les tâches avec des préfixes répétés, ce qui le rend idéal pour les sorties complexes et structurées ainsi que les conversations multi-tours. Choisissez SGLang plutôt que des alternatives comme vLLM lorsque vous avez besoin d'un décodage contraint ou que vous construisez des applications avec un partage étendu de préfixes.
