nginx について
リバースプロキシ、ロードバランサー、TLS終端、WebサーバーとしてのNginxを設定・調整する、システムエンジニア向けスキルです。安全な設定パターン、性能設定、運用上の注意点を扱います。
主な機能
- 01リバースプロキシとアップストリーム設定
- 02TLSとセキュリティヘッダー設定
- 03レート制限と圧縮
- 04WebSocketプロキシとキャッシュ
- 05設定検証とグレースフルリロード
活用シーン
- 01バックエンドサービス向けのNginx設定
- 02TLSとヘッダーによる仮想ホストの保護
- 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 エラーで拒否されます
コメント
Markdown 対応