スキル一覧に戻る

configure-reverse-proxy

pjt222
更新日 Yesterday
2 閲覧
17
2
17
GitHubで表示
メタgeneral

について

このスキルは、Nginx、Traefik、ShinyProxyなどのツールを使用して、複数のサービスを単一のエントリーポイント経由でルーティングするリバースプロキシ設定を構成します。WebSocketプロキシ処理、パス/ホストベースのルーティング、SSL終端、Dockerラベル自動検出を扱います。WebSocket接続のプロキシ、Dockerサービスの自動検出、またはネイティブTLSサポートのないサービスにSSLを追加する必要がある場合にご利用ください。

クイックインストール

Claude Code

推奨
メイン
npx skills add pjt222/agent-almanac -a claude-code
プラグインコマンド代替
/plugin add https://github.com/pjt222/agent-almanac
Git クローン代替
git clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/configure-reverse-proxy

このコマンドをClaude Codeにコピー&ペーストしてスキルをインストールします

ドキュメント


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

FunktionNginxTraefik
KonfigurationStatische DateienDocker-Labels / dynamisch
Auto-DiscoveryNein (manuell)Ja (Docker-Provider)
Let's EncryptUeber certbotEingebautes ACME
DashboardNein (Drittanbieter)Eingebaut
WebSocketManuelle KonfigurationAutomatisch
Geeignet fuerStatische Konfiguration, hoher TrafficDynamische 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/ vs http://app verhaelt sich bei Pfad-Stripping in Nginx unterschiedlich.
  • WebSocket-Timeout: Standard proxy_read_timeout ist 60s. Langlebige WebSocket-Verbindungen benoetigen 86400 (24h).
  • Docker-Socket-Sicherheit: Das Mounten von /var/run/docker.sock in 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.11 fuer Dockers internen DNS bei dynamischen Diensten verwenden.
  • Fehlende proxy_buffering off: Shiny- und SSE-Endpunkte benoetigen proxy_buffering off fuer Echtzeit-Streaming.

Verwandte Skills

  • configure-nginx - Detaillierte Nginx-Konfiguration mit SSL und Sicherheitsheadern
  • deploy-shinyproxy - ShinyProxy fuer containerisiertes Shiny-App-Hosting
  • setup-compose-stack - Compose-Stack mit Reverse Proxy
  • configure-api-gateway - API-Gateway-Muster mit Kong und Traefik

GitHub リポジトリ

pjt222/agent-almanac
パス: i18n/de/skills/configure-reverse-proxy
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

関連スキル

content-collections

メタ

このスキルは、Content Collections(Markdown/MDXファイルを型安全なデータコレクションに変換するTypeScriptファーストのツール)の本番環境でテストされた設定を提供します。Zodバリデーションによる型安全性を実現し、ブログ、ドキュメントサイト、コンテンツ重視のVite + Reactアプリケーション構築時にご利用ください。Viteプラグインの設定、MDXコンパイルから、デプロイ最適化、スキーマバリデーションまで、すべてを網羅しています。

スキルを見る

polymarket

メタ

このスキルは、開発者がPolymarket予測市場プラットフォームを活用したアプリケーション構築を可能にします。API統合による取引や市場データの取得に加え、WebSocketを介したリアルタイムデータストリーミングにより、ライブ取引や市場活動を監視できます。取引戦略の実装や、ライブ市場更新を処理するツールの作成にご利用ください。

スキルを見る

creating-opencode-plugins

メタ

このスキルは、開発者がコマンド、ファイル、LSP操作など25種類以上のイベントタイプにフックするOpenCodeプラグインを作成することを支援します。JavaScript/TypeScriptモジュール向けに、プラグイン構造、イベントAPI仕様、および実装パターンを提供します。カスタムイベント駆動ロジックでOpenCode AIアシスタントのライフサイクルをインターセプト、監視、または拡張する必要がある場合にご利用ください。

スキルを見る

sglang

メタ

SGLangは、高性能なLLMサービングフレームワークであり、RadixAttentionプレフィックスキャッシュを活用したJSON、正規表現、エージェントワークフロー向けの高速で構造化された生成を特長とします。特にプレフィックスが繰り返されるタスクにおいて、大幅に高速な推論を実現し、複雑な構造化出力やマルチターン対話に最適です。制約付きデコードが必要な場合や、広範なプレフィックス共有を伴うアプリケーションを構築する場合は、vLLMなどの代替案ではなくSGLangを選択してください。

スキルを見る