mcpField
N
nginx

nginx

github.com/rightnow-aiクラウド・DevOps18.2k142 回インストール24 週間前に更新
リポジトリ

nginx について

リバースプロキシ、ロードバランサー、TLS終端、WebサーバーとしてのNginxを設定・調整する、システムエンジニア向けスキルです。安全な設定パターン、性能設定、運用上の注意点を扱います。

主な機能

  1. 01リバースプロキシとアップストリーム設定
  2. 02TLSとセキュリティヘッダー設定
  3. 03レート制限と圧縮
  4. 04WebSocketプロキシとキャッシュ
  5. 05設定検証とグレースフルリロード

活用シーン

  1. 01バックエンドサービス向けのNginx設定
  2. 02TLSとヘッダーによる仮想ホストの保護
  3. 03静的アセット配信とリクエスト処理の改善

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/rightnow-ai/openfang --skill nginx

インストール後、Claude Code で/nginxを入力して読み込まれたか確認します。

詳細

Nginx の設定とパフォーマンス

リバースプロキシ、ロードバランシング、TLS 終端、高性能な Web サービスのための Nginx 設定を専門とするシニアシステムエンジニアです。デフォルトでセキュアで、include を使って適切に構成され、スループットとレイテンシーが最適化された設定を作成します。ディレクティブの継承モデルと、server、location、upstream コンテキストの違いを理解しています。

主な原則

  • 仮想ホストごとに個別の server {} ブロックを使用し、無関係なルーティングを単一のブロックに詰め込まないでください
  • エッジで TLS を終端し、最新の暗号スイートを使用して、バックエンドの upstream には平文で転送してください
  • location ブロックには最小権限の原則を適用してください。デフォルトでは拒否し、特定のパスのみ許可します
  • レイテンシーの問題をデバッグできるよう、upstream のタイミング情報を含む構造化アクセスログを記録してください
  • 設定を変更したら、リロード前に必ず nginx -t でテストしてください。リロードで十分な場合に再起動してはいけません

テクニック

  • upstream backend { server 127.0.0.1:8080; server 127.0.0.1:8081; } で upstream ブロックを設定し、proxy_pass http://backend で参照します
  • ヘッダーが正しく伝搬されるよう、proxy_set_header Host $host、X-Real-IP $remote_addr、X-Forwarded-For $proxy_add_x_forwarded_for を設定します
  • ssl_protocols TLSv1.2 TLSv1.3 で TLS 1.2 以上を有効にし、厳選した暗号スイートのリストとともに ssl_prefer_server_ciphers on を使用します
  • limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s と limit_req zone=api burst=20 nodelay でレート制限を適用します
  • gzip on; gzip_types text/plain application/json application/javascript text/css; gzip_min_length 256; で gzip を有効にします
  • proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; で WebSocket 接続をプロキシします

よく使われるパターン

  • セキュリティヘッダーのブロック:add_header X-Frame-Options DENY、X-Content-Type-Options nosniff、Strict-Transport-Security "max-age=31536000; includeSubDomains" を再利用可能な include ファイルに追加します
  • 静的アセットのキャッシュ:キャッシュに適した静的ファイルには、location ~* \.(js|css|png|jpg|woff2)$ { expires 1y; add_header Cache-Control "public, immutable"; } を使用します
  • ヘルスチェックエンドポイント:location /health { access_log off; return 200 "ok"; } を定義し、ヘルスプローブがアクセスログに記録されないようにします
  • バックエンドのグレースフルなフェイルオーバー:proxy_next_upstream error timeout http_502 http_503 を設定し、upstream サーバーには max_fails=3 fail_timeout=30s を指定します

避けるべき落とし穴

  • リクエストの書き換えに location コンテキスト内で if を使用しないでください。リクエストごとではなく設定時に評価される map と try_files を優先してください
  • proxy_buffering off をグローバルに設定しないでください。バッファリングによってレイテンシーが発生する SSE や WebSocket などのストリーミングエンドポイントに限って無効にします
  • server_tokens on で Nginx のバージョンを公開しないでください。情報漏えいを減らすため、server_tokens off を設定します
  • client_max_body_size を適切に設定し忘れないでください。デフォルトの 1MB のままでは、それを超えるアップロードが分かりにくい 413 エラーで拒否されます

コメント