要求された応答ログを nginx ログに追加します

不言
リリース: 2023-03-25 12:34:01
オリジナル
2632 人が閲覧しました

この記事では、nginxのログにリクエストを追加した際の応答ログを中心に紹介していますので、必要な方は参考にしてください

この機能はnginxの組み込み機能には含まれていません。サードパーティのモジュール ngx_lua をインストールする必要があります。このモジュールには Lua 言語が必要なので、対応する Lua 言語パッケージをインストールする必要があります

1. LuaJIT をダウンロードしてインストールします

# cd /usr/local/src
# wget http://luajit.org/download/LuaJIT-2.0.2.tar.gz
# tar -xzvf LuaJIT-2.0.2.tar.gz
# cd LuaJIT-2.0.2
# make
ログイン後にコピー

コンパイルが成功しました

OK  Successfully built LuaJIT
make[1]: Leaving directory `/usr/local/src/LuaJIT-2.0.2/src'
==== Successfully built LuaJIT 2.0.2 ====
# make install
ログイン後にコピー

次の内容はインストールが成功したことを示しています

==== LuaJIT 2.0.2 を /usr/local に正常にインストールしました ====

2. nginx lua モジュールをダウンロードして準備します

# cd /usr/local/src
# wget https://github.com/chaoslawful/lua-nginx-module/archive/v0.8.6.tar.gz
# tar -xzvf v0.8.6
ログイン後にコピー

3. nginxをインストールします

# cd /usr/local/src/
# wget http://nginx.org/download/nginx-1.4.2.tar.gz
# tar -xzvf nginx-1.4.2.tar.gz
# cd nginx-1.4.2
//先导入环境变量,告诉nginx去哪里找luajit
# export LUAJIT_LIB=/usr/local/lib
# export LUAJIT_INC=/usr/local/include/luajit-2.0
# ./configure --prefix=/usr/local/nginx-1.4.2 --add-module=../lua-nginx-module-0.8.6
# make -j2
# make install
ログイン後にコピー

4. インストールが成功したかどうかをテストします

luaコマンドメソッド

サーバーにローカルを追加します

# cd /usr/local/nginx-1.4.2/conf/
# vi nginx.conf
ログイン後にコピー

その後、nginxを起動します

location /hello {
   default_type 'text/plain';
   content_by_lua 'ngx.say("hello, lua")';
  }
ログイン後にコピー

ブラウザアクセス:

http://127.0.0.1/hello

表示: hello, lua

注:

1.注意してください。エラーなく各モジュールのインストールディレクトリにコピーします

2. apt-nginxをgetメソッドでインストールした場合、このメソッドでダウンロードしたソフトウェアはコンパイルできないため、まずnginxを削除する必要があります

3.

これサードパーティのインストールが成功したことを示します。

5. ログの追加を開始しましょう

# cd /usr/local/nginx-1.4.2/sbin
# ./nginx
ログイン後にコピー

この時点で、応答ログは正常に追加されています。

Lua 言語を知っている場合は、要件をより適切に満たすために次のコードを変更できます。

http {
 log_format mylog 'response_body:$resp_body';

 server {
  #记录nginx请求返回值
  lua_need_request_body on;
  set $resp_body "";
  body_filter_by_lua '
   local resp_body = string.sub(ngx.arg[1], 1, 1000)
   ngx.ctx.buffered = (ngx.ctx.buffered or "") .. resp_body
   if ngx.arg[2] then
    ngx.var.resp_body = ngx.ctx.buffered
   end
  ';
     
  location / {
   proxy_pass http://127.0.0.1:5000;
   access_log /var/log/nginx/access.log mylog;
   }
 }
}
ログイン後にコピー

ログを出力すると、言語応答結果に漢字が含まれる場合、16進数に変換されて認識できないことがわかります。

応答ログの一部は次のとおりです:

response_body: {x22codex22: 404, x22messagex22: x22xE8xAFxB7xE6xB1x82xE7x9Ax84xE8xB5x84xE6xBAx90xE4xB8x8DxE5xADx98 x E5x9CxA8x22、x22datax22: {}}


は、Python スクリプトにコピーすることで解決できます。

  body_filter_by_lua '
   local resp_body = string.sub(ngx.arg[1], 1, 1000)
   ngx.ctx.buffered = (ngx.ctx.buffered or "") .. resp_body
   if ngx.arg[2] then
    ngx.var.resp_body = ngx.ctx.buffered
   end
  ';
ログイン後にコピー

入力結果は次のとおりです:

{"code": 404, "message": "要求されたリソースは存在しません", "data": {}}

以上が要求された応答ログを nginx ログに追加しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート