2019年7月20日土曜日

nginx で error.log にログ意図的に出力させる方法

概要

nginx の error.log をテストで意図的に出力させたい場合はあると思います
そんなときにてっとり早くエラーログを出力させる方法を紹介します
なお今回は nginx コンテナを使っています

環境

  • macOS 10.14.5
  • docker 18.09.2

default.conf の編集

CGI 用の URI を活用します
.php でアクセスが来たらそのままバックエンドのアプリに流しますが実際はないのでこれでエラーログが出ます

  • vim default.conf
location ~ \.php$ {
    proxy_pass   http://127.0.0.1;
}

途中他の設定もありますが省略しています
なお default.conf はコンテナ内から cp しても OK です

  • docker -d run nginx
  • docker cp 403876658f4e:/etc/nginx/conf.d/default.conf .

default.conf を使って nginx コンテナを起動

作成した default.conf を使ってコンテナを起動します

  • docker run -d -p 80:80 -v $(pwd)/default.conf:/etc/nginx/conf.d/default.conf nginx

動作確認

docker logs には標準出力と標準エラーのどちらも流れてきます
標準出力のみを表示する場合は

  • docker logs -f 403876658f4e 2> /dev/null

標準エラーのみを表示する場合は

  • docker logs -f 403876658f4e > /dev/null

という感じで表示を制限できます
今回はエラーログを表示させたいので下を使います
そして curl を使って以下のようにアクセスしてみましょう

  • curl localhost/index.php

すると以下のようにエラーログが出力されると思います

2019/07/17 01:37:16 [alert] 7#7: 1024 worker_connections are not enough 2019/07/17 01:37:16 [error] 7#7: *1021 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET /index.php HTTP/1.0", upstream: "http://127.0.0.1:80/index.php", host: "127.0.0.1"

最後に

nginx の error.log のテストをしたい場合に意図的にエラーログを出力する方法を紹介しました
これ以外にも方法はあると思いますが思いつかない場合には使ってみてください

0 件のコメント:

コメントを投稿