MCP HubMCP Hub
Вернуться к навыкам

configure-reverse-proxy

pjt222
Обновлено Yesterday
5 просмотров
17
2
17
Посмотреть на GitHub
Документацияgeneral

О программе

Этот навык настраивает обратное проксирование с использованием Nginx, Traefik и ShinyProxy для маршрутизации нескольких сервисов через единую точку входа. Он выполняет ключевые задачи, такие как проксирование WebSocket, маршрутизация на основе пути/хоста, SSL-терминация и автоматическое обнаружение 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 для установки этого навыка

Документация

配置反向代理

以 Nginx、Traefik、或 ShinyProxy 設反向代理模式以路由流量至後端服務。

適用時機

  • 將多服務置於單一入口之後
  • 代理 WebSocket 連接(Shiny、Socket.IO、即時重載)
  • 以 Traefik 標籤自動發現 Docker 服務
  • 路徑式或主機式路由至不同後端
  • 為不自處 TLS 之服務加 SSL 終結

輸入

  • 必要:待代理之後端服務(host:port)
  • 必要:路由策(路徑式、主機式、或兩者)
  • 選擇性:代理工具偏好(Nginx、Traefik)
  • 選擇性:主機式路由之域名
  • 選擇性:待代理之 WebSocket 端點

步驟

步驟一:擇代理工具

FeatureNginxTraefik
ConfigurationStatic filesDocker labels / dynamic
Auto-discoveryNo (manual)Yes (Docker provider)
Let's EncryptVia certbotBuilt-in ACME
DashboardNo (3rd party)Built-in
WebSocketManual configAutomatic
Best forStatic config, high trafficDynamic Docker environments

步驟二:Nginx — 路徑式路由

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;
    }
}

註: proxy_pass/ 剝位置前綴。proxy_pass http://api:8000/;location /api//api/users 轉為 /users

步驟三:Nginx — 主機式路由

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;
    }
}

步驟四:Nginx — WebSocket 代理

WebSocket 需升級頭。對 Shiny、Socket.IO、即時重載必需:

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;
}

Shiny 應用特定:

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;
    }
}

預期: WebSocket 連接建且持。

失敗時:proxy_http_version 1.1 已設。驗 UpgradeConnection 頭。

步驟五:Traefik — Docker 標籤自動發現

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:

預期: Traefik 經標籤自動發現服務,行 SSL 憑證供給。

步驟六:Traefik — 以標籤行路徑式路由

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"

步驟七:Traefik — 速率限與頭

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"

步驟八:驗代理配置

# Nginx: test config
docker compose exec nginx nginx -t

# Check routing
curl -H "Host: api.example.com" http://localhost/health

# Check WebSocket (needs wscat: npm install -g wscat)
wscat -c ws://localhost/ws/

# Traefik dashboard (if enabled)
# http://localhost:8080/dashboard/

預期: 請求路由至正確後端。WebSocket 升級成。

驗證

  • HTTP 請求依路徑或主機路由至正確後端
  • WebSocket 連接建且持
  • SSL 終結運(若已配)
  • 後端服務收正確之 HostX-Real-IPX-Forwarded-For
  • Traefik 經標籤自動發現新服務(若用 Traefik)
  • 配置於 docker compose restart 後仍存

常見陷阱

  • 尾斜線不符proxy_pass http://app/ vs http://app 於 Nginx 中路徑剝之行為不同
  • WebSocket 超時:預 proxy_read_timeout 為 60s。長駐 WebSocket 連接需 86400(24 時)
  • Docker socket 安全:於 Traefik 掛 /var/run/docker.sock 予其全 Docker 存取。用 ro 掛並慮 socket 代理
  • DNS 解析:Nginx 於啟時解上游。用 resolver 127.0.0.11 以 Docker 內部 DNS 行動態服務
  • proxy_buffering off:Shiny 與 SSE 端點需 proxy_buffering off 以行即時串流

相關技能

  • configure-nginx - 含 SSL 與安全頭之詳細 Nginx 配置
  • deploy-shinyproxy - 容器化 Shiny 應用之 ShinyProxy 主機
  • setup-compose-stack - 用反向代理之 compose 棧
  • configure-api-gateway - 含 Kong 與 Traefik 之 API 閘道模式

GitHub репозиторий

pjt222/agent-almanac
Путь: i18n/wenyan-lite/skills/configure-reverse-proxy
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

Похожие навыки

railway-docs

Документация

Этот навык получает актуальную документацию Railway, чтобы отвечать на вопросы о функциях, возможностях или конкретных URL-адресах документации. Он гарантирует, что разработчики получают точную и современную информацию напрямую из официальных источников Railway. Используйте его, когда пользователи спрашивают, как работает Railway, или ссылаются на документацию Railway.

Просмотреть навык

n8n-code-python

Документация

Этот навык Claude предоставляет экспертные рекомендации по написанию кода Python в узлах Code платформы n8n, в частности, по использованию стандартной библиотеки Python и работе со специальным синтаксисом n8n, таким как `_input`, `_json` и `_node`. Он помогает разработчикам понять ограничения Python в среде n8n и рекомендует использовать JavaScript для большинства рабочих процессов, предлагая решения на Python для конкретных задач по преобразованию данных.

Просмотреть навык

archon

Документация

Навык Archon предоставляет семантический поиск на основе RAG и управление проектами через REST API. Используйте его для запросов к документации, управления иерархическими проектами/задачами и выполнения поиска информации с возможностью загрузки документов. Всегда в первую очередь обращайтесь к Archon при поиске во внешней документации, прежде чем использовать другие источники.

Просмотреть навык

n8n-code-javascript

Документация

Этот навык Claude предоставляет экспертные рекомендации по написанию кода JavaScript в узлах Code платформы n8n. Он охватывает важный синтаксис, специфичный для n8n, включая переменные `$input`/`$json`, HTTP-хелперы и работу с DateTime, а также помогает в устранении распространённых ошибок. Используйте его при разработке рабочих процессов в n8n, требующих кастомной обработки JavaScript в узлах Code.

Просмотреть навык