configure-reverse-proxy
О программе
Этот навык настраивает конфигурации обратного прокси для Nginx, Traefik и ShinyProxy для маршрутизации нескольких сервисов через единую точку входа. Он обеспечивает проксирование WebSocket, маршрутизацию на основе пути/хоста, SSL-терминацию и автоматическое обнаружение Docker-меток. Используйте его для предоставления доступа к контейнеризованным сервисам, управления подключениями WebSocket или добавления TLS к сервисам без встроенной поддержки SSL.
Быстрая установка
Claude Code
Рекомендуется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-proxyСкопируйте и вставьте эту команду в Claude Code для установки этого навыка
Документация
配反代
以 Nginx、Traefik 或 ShinyProxy 設反代路流至後端。
用
- 多服於單入點後
- 代 WebSocket 連(Shiny、Socket.IO、live reload)
- 以 Traefik 標自發 Docker 服
- 依路徑或主機路至異後
- 無 TLS 本能之服加 SSL 終
入
- 必:所代後端(host:port)
- 必:路策(路徑、主機、俱)
- 可:代具好(Nginx、Traefik)
- 可:主機路之域名
- 可:所代 WebSocket 端
行
一:擇代具
| Feature | Nginx | Traefik |
|---|---|---|
| Configuration | Static files | Docker labels / dynamic |
| Auto-discovery | No (manual) | Yes (Docker provider) |
| Let's Encrypt | Via certbot | Built-in ACME |
| Dashboard | No (3rd party) | Built-in |
| WebSocket | Manual config | Automatic |
| Best for | Static config, high traffic | Dynamic 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 尾 / 削 location 前綴。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、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;
}
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 已設。驗 Upgrade 與 Connection 頭。
五: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 終行(若配)
- 後端收正
Host、X-Real-IP、X-Forwarded-For頭 - Traefik 經標自發新服(若用)
- 配於
docker compose restart後留
忌
- 尾斜線不合:
proxy_pass http://app/vshttp://app於 Nginx 路徑削行異。 - WebSocket 超時:默
proxy_read_timeout60s。長連 WebSocket 須86400(24h)。 - 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- Nginx 詳配含 SSL 與安頭deploy-shinyproxy- 容器 Shiny 應託 ShinyProxysetup-compose-stack- 用反代之 compose 堆configure-api-gateway- Kong 與 Traefik API 閘模
GitHub репозиторий
Похожие навыки
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.
