nginx-request-logging について
Nginx ウェブサーバーの管理者向け設定ガイドです。カスタムログ、リクエスト制限、エラーページの設定に加え、設定の検査と動作確認の手順を扱います。
主な機能
- 01既存設定とシステム状態の確認
- 02カスタムログ形式の設定
- 03レート制限ゾーンとルールの設定
- 04カスタムエラーページの作成
- 05設定テストとサービス動作の確認
活用シーン
- 01Nginx サイト設定の導入
- 02サービスへのアクセスログ追加
- 03レート制限の設定と確認
- 04標準外ポートやエラーページの設定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ letta-ai/ skills --skill nginx-request-loggingインストール後、Claude Code で/nginx-request-loggingを入力して読み込まれたか確認します。
詳細
Nginx リクエストログ設定
このスキルでは、カスタムログ、レート制限、エラーハンドリングを設定して Nginx Web サーバーを構成する方法を説明します。
このスキルを使用する場面
次の作業を行う場合に、このスキルを適用します。
- Nginx のインストールと設定
- カスタムログ形式の設定
- レート制限の実装
- カスタムエラーページ(404、500 など)の作成
- 標準以外のポートでリッスンする Nginx の設定
設定前の分析
Nginx の設定を変更する前に、次の作業を行います。
-
既存の設定構造を確認する
/etc/nginx/nginx.confを読み、現在の設定を把握します- 既存の
includeディレクティブを確認し、ファイル構成を把握します - ログ形式、レート制限ゾーン、その他のグローバル設定が定義されている場所を特定します
-
システムの状態を確認する
- Nginx がすでにインストールされているか確認します:
which nginxまたはnginx -v - Nginx がすでに実行中か確認します:
pgrep nginxまたはps aux | grep nginx - 対象ポートが使用可能か確認します:
ss -tlnp | grep <port>またはnetstat -tlnp | grep <port>
- Nginx がすでにインストールされているか確認します:
-
元の設定をバックアップする
- 変更前にバックアップを作成します:
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
- 変更前にバックアップを作成します:
設定方法
ディレクトリ構造
Nginx の設定は通常、次の階層構造になっています。
/etc/nginx/nginx.conf- メイン設定(グローバル設定、ログ形式、レート制限ゾーン)/etc/nginx/conf.d/- サイト固有の設定(server ブロック)/etc/nginx/sites-available/および/etc/nginx/sites-enabled/- 代替のサイト管理方式(Debian 系)
設定の配置ガイドライン
| 設定の種類 | 場所 | 理由 |
|---|---|---|
| ログ形式の定義 | nginx.conf(http ブロック) | server ブロックで使用する前に定義する必要があります |
| レート制限ゾーン | nginx.conf(http ブロック) | ゾーンは複数の server ブロックで共有されます |
| server ブロック | conf.d/*.conf | モジュール化され、管理が容易です |
| カスタムエラーページ | server ブロックまたは location ブロック | コンテキストに応じて設定します |
レート制限の設定
レート制限には、次の 2 つの設定が必要です。
-
ゾーン定義(nginx.conf の http ブロック内):
limit_req_zone $binary_remote_addr zone=zonename:10m rate=10r/s; -
ゾーンの適用(server ブロックまたは location ブロック内):
limit_req zone=zonename burst=5 nodelay;
カスタムログ形式
http ブロック内でカスタムログ形式を定義します。
log_format custom_format '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
server ブロックで適用します。
access_log /var/log/nginx/custom_access.log custom_format;
サービス管理
Nginx のサービス管理方法は環境によって異なります。
| 環境 | 起動コマンド | 再読み込みコマンド | 停止コマンド |
|---|---|---|---|
| systemd | systemctl start nginx | systemctl reload nginx | systemctl stop nginx |
| 直接実行 | nginx | nginx -s reload | nginx -s stop |
| Docker/コンテナー | nginx -g 'daemon off;' | nginx -s reload | nginx -s quit |
重要:起動または再読み込みの前に、必ず設定をテストしてください。
nginx -t
検証方法
基本機能
curl -s http://localhost:<port>/
curl -s -o /dev/null -w "%{http_code}" http://localhost:<port>/nonexistent
レート制限の検証
レート制限を発動させるには、リクエストを同時に送信する必要があります。逐次的にリクエストを送信しても、レート制限を超過しません。
正しい方法(並列リクエスト):
seq 20 | xargs -P 20 -I {} curl -s -o /dev/null -w "%{http_code}\n" http://localhost:<port>/
誤った方法(レート制限は発動しません):
for i in {1..20}; do curl -s http://localhost:<port>/; done # Too slow, sequential
ログの検証
tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log
よくある落とし穴
-
ログ形式が見つからない:ログ形式は、server ブロックから参照する前に nginx.conf で定義する必要があります
-
レート制限が発動しない:逐次的なリクエストでは遅すぎます。
xargs -Pなどを使って並列リクエストを送信してください -
設定構文エラー:起動または再読み込みの前に、必ず
nginx -tを実行してください -
ポートがすでに使用中:新しいポートを設定する前に、
ss -tlnpで確認してください -
systemctl を使用できない:コンテナーや最小構成の環境では、
nginxコマンドを直接使用してください -
デフォルトサイトとの競合:カスタム設定を作成する場合は、デフォルトサイトの設定を削除するか、無効にしてください。
rm -f /etc/nginx/sites-enabled/default -
ディレクトリが存在しない:設定ファイルを書き込む前に、必要なディレクトリが存在することを確認してください。
ls -la /etc/nginx/conf.d/
実行効率
- ファイル操作をまとめる:可能な場合は、複数の静的ファイル(index.html、404.html など)を並行して作成します
- 検証手順をまとめる:1 回の検証で複数のエンドポイントをテストします
- 事前に検証を計画する:実装前にテスト戦略を決定します
- 冪等性のあるコマンドを使用する:既存ファイルや存在しないファイルを適切に処理できるよう、
mkdir -pやrm -fを優先します
ワークフローの例
- システムの状態を確認します(Nginx のインストール状況、実行状況、ポートの空き状況)
- 既存の nginx.conf の構成を確認します
- 設定をバックアップします
- 必要なディレクトリと静的コンテンツを作成します
- グローバル設定(ログ形式、レート制限ゾーン)を nginx.conf に適用します
- conf.d/ にサーバー設定を作成します
- 競合するデフォルト設定を削除します
nginx -tで設定をテストします- Nginx サービスを起動または再読み込みします
- すべての機能(メインページ、エラーページ、レート制限、ログ)を検証します