Acerca de
Esta habilidad de Claude configura Nginx como servidor web y proxy inverso para uso en producción. Maneja el servicio de archivos estáticos, el proxy inverso hacia servicios backend, la terminación SSL/TLS con Let's Encrypt y el balanceo de carga. También añade mejoras de seguridad como limitación de tasa y cabeceras de seguridad.
Instalación rápida
Claude Code
Recomendadonpx 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-nginxCopia y pega este comando en Claude Code para instalar esta habilidad
Documentación
name: configure-nginx description: > NginxをWebサーバーおよびリバースプロキシとして設定する。静的ファイル配信、アップストリームサービスへの リバースプロキシ、Let's EncryptによるSSL/TLS終端、locationブロック、ロードバランシング、 レート制限、およびセキュリティヘッダーをカバーする。本番環境での静的ファイル配信、バックエンド サービス(Node.js、Python、R/Shiny)へのリバースプロキシ、SSL/TLSの終端、インスタンス間の ロードバランシング、またはエンドポイント強化のためのレート制限とセキュリティヘッダーの追加に使用する。 license: MIT allowed-tools: Read Write Edit Bash Grep Glob metadata: author: Philipp Thoss version: "1.0" domain: containerization complexity: intermediate language: multi tags: nginx, reverse-proxy, ssl, tls, lets-encrypt, web-server, security-headers locale: ja source_locale: en source_commit: 6f65f316 translator: claude-sonnet-4-6 translation_date: 2026-03-16
Nginxの設定
SSL終端とセキュリティ強化を備えたWebサーバーおよびリバースプロキシとしてNginxをセットアップする。
使用タイミング
- 本番環境での静的ファイル(HTML、CSS、JS)の配信
- バックエンドサービス(Node.js、Python、Go、R/Shiny)へのリバースプロキシ
- Let's Encrypt証明書によるSSL/TLSの終端
- 複数のバックエンドインスタンスへのロードバランシング
- レート制限とセキュリティヘッダーの追加
入力
- 必須: デプロイ先(Dockerコンテナまたはベアメタル)
- 必須: プロキシ先のバックエンドサービス(host:port)
- 任意: SSL用ドメイン名
- 任意: 静的ファイルディレクトリ
手順
ステップ1: 基本リバースプロキシ
nginx.conf:
events {
worker_connections 1024;
}
http {
upstream app {
server app:3000;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://app;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
Docker Composeサービス:
services:
nginx:
image: nginx:1.27-alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
depends_on:
- app
期待結果: ポート80へのリクエストがappサービスに転送される。
ステップ2: 静的ファイル配信
server {
listen 80;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
location /assets/ {
expires 1y;
add_header Cache-Control "public, immutable";
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2?)$ {
expires 6M;
add_header Cache-Control "public";
}
}
ステップ3: Let's EncryptによるSSL/TLS
certbotのwebrootメソッドを使用する:
server {
listen 80;
server_name example.com;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://app;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
certbot付きDocker Compose:
services:
nginx:
image: nginx:1.27-alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- certbot-webroot:/var/www/certbot:ro
- certbot-certs:/etc/letsencrypt:ro
certbot:
image: certbot/certbot
volumes:
- certbot-webroot:/var/www/certbot
- certbot-certs:/etc/letsencrypt
volumes:
certbot-webroot:
certbot-certs:
初回証明書の取得:
docker compose run --rm certbot certonly \
--webroot -w /var/www/certbot \
-d example.com --email [email protected] --agree-tos
期待結果: 有効なLet's Encrypt証明書でHTTPSが動作する。
失敗時: DNSがサーバーを指していることを確認する。ACMEチャレンジのためにポート80が開いていることを確認する。
ステップ4: セキュリティヘッダー
server {
# ... 上記のSSL設定 ...
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline';" always;
# Nginxバージョンを隠す
server_tokens off;
}
ステップ5: レート制限
http {
# レート制限ゾーンの定義
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
limit_req_zone $binary_remote_addr zone=login:10m rate=1r/s;
server {
location /api/ {
limit_req zone=api burst=20 nodelay;
proxy_pass http://app;
}
location /login {
limit_req zone=login burst=5;
proxy_pass http://app;
}
}
}
ステップ6: ロードバランシング
upstream app {
least_conn;
server app1:3000;
server app2:3000;
server app3:3000 backup;
}
| メソッド | ディレクティブ | 動作 |
|---|---|---|
| ラウンドロビン | (デフォルト) | 均等分配 |
| 最少接続 | least_conn | 最も負荷の少ないサーバーにルーティング |
| IPハッシュ | ip_hash | スティッキーセッション |
| 重み付き | server app:3000 weight=3 | 比例配分 |
ステップ7: 設定のテスト
# 設定構文のテスト
docker compose exec nginx nginx -t
# ダウンタイムなしでリロード
docker compose exec nginx nginx -s reload
# レスポンスヘッダーの確認
curl -I https://example.com
期待結果: nginx -tが構文OKを報告する。ヘッダーにセキュリティヘッダーが含まれる。
バリデーション
-
nginx -tが設定が有効であると報告する - HTTPがHTTPSにリダイレクトされる(SSL有効時)
- バックエンドサービスがプロキシ経由で到達可能
- レスポンスにセキュリティヘッダーが存在する
- 過剰なリクエストでレート制限が発動する
- SSL Labsテストでa+評価を取得する(公開の場合)
よくある落とし穴
proxy_set_header Hostの不足: バックエンドが誤ったHostヘッダーを受信し、バーチャルホストとリダイレクトが壊れるlocationの順序が重要: Nginxは最も具体的なマッチを使用する。完全一致(=)> プレフィックス(^~)> 正規表現(~)> 一般プレフィックス- SSL証明書の更新:
certbot renewを実行してNginxをリロードするcronまたはタイマーをセットアップする - 大きなリクエストボディ: デフォルトの
client_max_body_sizeは1MB。ファイルアップロード用に増やす:client_max_body_size 50m; - WebSocketプロキシ: 追加ヘッダーが必要。パターンは
configure-reverse-proxyを参照
関連スキル
configure-reverse-proxy- WebSocketやTraefikを含むマルチツールプロキシパターンsetup-compose-stack- Nginxを含むcomposeスタックdeploy-searxng- SearXNGのフロントエンドとしてNginxを使用configure-ingress-networking- Kubernetes Ingress(NGINX Ingress Controller)
Repositorio GitHub
Frequently asked questions
What is the configure-nginx skill?
configure-nginx is a Claude Skill by pjt222. Skills package instructions and resources that Claude loads on demand, so Claude can perform configure-nginx-related tasks without extra prompting.
How do I install configure-nginx?
Use the install commands on this page: add configure-nginx to Claude Code as a plugin, or clone its repository into your skills directory, then restart Claude so it picks up the skill.
What category does configure-nginx belong to?
configure-nginx is in the Other category, tagged general.
Is configure-nginx free to use?
Yes. configure-nginx is listed on AIMCP and free to install. It runs inside Claude, so no separate service account is required to use the skill itself.
Habilidades relacionadas
LlamaGuard es el modelo de Meta de 7-8B parámetros para moderar las entradas y salidas de LLM en seis categorías de seguridad como violencia y discurso de odio. Ofrece una precisión del 94-95% y puede implementarse usando vLLM, Hugging Face o Amazon SageMaker. Utiliza esta skill para integrar fácilmente filtrado de contenido y barreras de seguridad en tus aplicaciones de IA.
Esta Skill de Claude ayuda a los desarrolladores a optimizar los costes en la nube mediante el ajuste de tamaño de recursos, estrategias de etiquetado y análisis de gastos. Proporciona un marco para reducir los gastos en la nube e implementar una gobernanza de costes en AWS, Azure y GCP. Úsala cuando necesites analizar los costes de infraestructura, ajustar el tamaño de los recursos o cumplir con restricciones presupuestarias.
Esta habilidad de Claude analiza los mercados de apuestas deportivas, incluyendo spreads, over/unders y apuestas de propuestas, mediante el examen de tendencias históricas y estadísticas situacionales para identificar apuestas de valor. Proporciona una salida en markdown estructurado con recomendaciones accionables con fines educativos. Los desarrolladores deben utilizar esto para herramientas de análisis de apuestas deportivas, teniendo en cuenta que está diseñado únicamente para entretenimiento/educación.
Esta habilidad cuantiza LLMs a precisión de 8 o 4 bits utilizando bitsandbytes, logrando una reducción de memoria del 50-75% con pérdida mínima de precisión. Es ideal para ejecutar modelos más grandes en memoria GPU limitada o para acelerar la inferencia, admitiendo formatos como INT8, NF4 y FP4. La habilidad se integra con HuggingFace Transformers y permite entrenamiento QLoRA y optimizadores de 8 bits.
