configure-nginx
정보
이 Claude Skill은 Nginx를 프로덕션 환경에서 웹 서버 및 리버스 프록시로 구성합니다. 정적 파일 서빙, 백엔드 서비스에 대한 리버스 프록시 처리, Let's Encrypt를 통한 SSL/TLS 종료, 로드 밸런싱을 담당합니다. 또한 속도 제한 및 보안 헤더와 같은 보안 강화 기능도 추가합니다.
빠른 설치
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-nginxClaude Code에서 이 명령을 복사하여 붙여넣어 스킬을 설치하세요
문서
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)
GitHub 저장소
연관 스킬
llamaguard
기타LlamaGuard는 폭력 및 혐오 발언 등 6가지 안전 범주에서 LLM 입력과 출력을 조정하기 위한 Meta의 70-80억 파라미터 모델입니다. 94-95% 정확도를 제공하며 vLLM, Hugging Face 또는 Amazon SageMaker를 사용해 배포할 수 있습니다. 이 기술을 사용하여 AI 애플리케이션에 콘텐츠 필터링 및 안전 가드레일을 손쉽게 통합하세요.
cost-optimization
기타이 Claude Skill은 리소스 적정화, 태깅 전략, 지출 분석을 통해 개발자들이 클라우드 비용을 최적화할 수 있도록 지원합니다. AWS, Azure, GCP에서 클라우드 비용을 절감하고 비용 거버넌스를 구현하기 위한 프레임워크를 제공합니다. 인프라 비용을 분석하거나, 리소스를 적정화하거나, 예산 제약을 충족해야 할 때 사용하세요.
quantizing-models-bitsandbytes
기타이 스킬은 bitsandbytes를 사용하여 LLM을 8비트 또는 4비트 정밀도로 양자화하며, 최소한의 정확도 손실로 50-75%의 메모리 감소를 달성합니다. 제한된 GPU 메모리에서 더 큰 모델을 실행하거나 추론을 가속화하는 데 이상적이며, INT8, NF4, FP4와 같은 형식을 지원합니다. 이 스킬은 HuggingFace Transformers와 통합되어 QLoRA 학습 및 8비트 옵티마이저를 가능하게 합니다.
dispatching-parallel-agents
기타이 Claude Skill은 3개 이상의 독립적인 문제를 동시에 조사하고 해결하기 위해 다중 에이전트를 배치합니다. 공유 상태나 의존성 없이 해결 가능한 무관련 장애 시나리오에 맞게 설계되었습니다. 핵심 기능은 병렬 문제 해결로, 각 독립 문제 영역마다 하나의 에이전트를 할당하여 효율성을 극대화합니다.
