[解決済み] POST データを $request_body からログに記録する
質問
私は、分析を処理し、ログのためのクエリ文字列を解析するために正常に動作するピクセルをレンダリングする多くの GET リクエストを処理するように自分の構成を設定しています。追加のサードパーティのデータストリームで、私はリクエストボディの中に期待されるロギング可能なフォーマットのJSONを持つ特定のURLへのPOSTリクエストを処理する必要があります。私は、セカンダリサーバで
proxy_pass
でセカンダリサーバを使いたくないし、GETリクエストで行うように、関連するログファイルに応答全体を記録したいだけなのです。私が使用しているいくつかのコードのスニペットは、次のようになります。
GETリクエスト(これは素晴らしく機能します)。
location ^~ /rl.gif {
set $rl_lcid $arg_lcid;
if ($http_cookie ~* "lcid=(.*\S)")
{
set $rl_lcid $cookie_lcid;
}
empty_gif;
log_format my_tracking '{ "guid" : "$rl_lcid", "data" : "$arg__rlcdnsegs" }';
access_log /mnt/logs/nginx/my.access.log my_tracking;
rewrite ^(.*)$ http://my/url?id=$cookie_lcid? redirect;
}
私がやろうとしていることは、なんとなくこんな感じです。 POSTリクエスト(これは動作しません)。
location /bk {
log_format bk_tracking $request_body;
access_log /mnt/logs/nginx/bk.access.log bk_tracking;
}
カーリング
curl http://myurl/bk -d name=example
をクリックすると、404ページが見つかりませんと表示されます。
それから、私は試してみました。
location /bk.gif {
empty_gif;
log_format bk_tracking $request_body;
access_log /mnt/logs/nginx/bk.access.log bk_tracking;
}
カーリング
curl http://myurl/bk.gif -d name=example
は
405 Not Allowed
.
私の現在のバージョンは
nginx/0.7.62
. 正しい方向へのどんな助けでも非常に感謝します! ありがとうございます!
アップデイト ということで、今の私の投稿はこんな感じです。
location /bk {
if ($request_method != POST) {
return 405;
}
proxy_pass $scheme://127.0.0.1:$server_port/dummy;
log_format my_tracking $request_body;
access_log /mnt/logs/nginx/my.access.log my_tracking;
}
location /dummy { set $test 0; }
これは投稿データを正しく記録していますが、リクエスト側では404を返します。もし私が上記のコードを変更して、以下のように200を返すようにしたら。
location /bk {
if ($request_method != POST) {
return 405;
}
proxy_pass $scheme://127.0.0.1:$server_port/dummy;
log_format my_tracking $request_body;
access_log /mnt/logs/nginx/my.access.log my_tracking;
return 200;
}
location /dummy { set $test 0; }
そして
200
を正しく返しますが、投稿データは記録されなくなります。
その他の更新 ちょっとだけ、動作する解決策を見つけました。うまくいけば、これが他の人の助けになります。
どのように解決するのですか?
この解決策は魅力的に機能します(2017年に更新され、log_formatがnginx設定のhttp部分に必要であることを尊重するようになりました)。
log_format postdata $request_body;
server {
# (...)
location = /post.php {
access_log /var/log/nginx/postdata.log postdata;
fastcgi_pass php_cgi;
}
}
nginxにcgiスクリプトを呼び出すと思わせるのがコツだと思います。
関連
-
[解決済み] Dockerコンテナの中から、マシンのローカルホストに接続するにはどうすればよいですか?
-
[解決済み] Firefox または Chrome ブラウザから HTTP POST リクエストを手動で送信する方法
-
[解決済み] Node.jsでPOSTデータを処理する方法は?
-
[解決済み] PHP、cURL、HTTP POSTの例?
-
[解決済み] React Nativeでロギングを行う方法
-
[解決済み] start-stop-daemonで起動したプロセスのstdoutを記録するにはどうすればよいですか?
-
[解決済み] Log.INFO vs. Log.DEBUG [終了しました。]
-
[解決済み] ansible-playbookモジュール実行のログ/詳細を取得するにはどうすればよいですか?
-
[解決済み] なぜ "log and throw "はアンチパターンと言われるのか?[クローズド]
-
[解決済み] Google Apps Scriptでコンソールに印刷する?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] start-stop-daemonで起動したプロセスのstdoutを記録するにはどうすればよいですか?
-
[解決済み] Log.INFO vs. Log.DEBUG [終了しました。]
-
[解決済み] プログラムの運用に最適なHaskellのライブラリは?[クローズド]
-
[解決済み] コマンドウィンドウの行数を増やす
-
[解決済み] ansible-playbookモジュール実行のログ/詳細を取得するにはどうすればよいですか?
-
[解決済み] なぜ "log and throw "はアンチパターンと言われるのか?[クローズド]
-
[解決済み] Google Apps Scriptでコンソールに印刷する?
-
[解決済み] vlcのログを取得する方法は?[クローズド]
-
[解決済み] なぜfmt.Printlnではなくlog.Printlnを使用しなければならないのですか?
-
[解決済み] 実行中のDockerコンテナからファイルや標準出力を読み込む方法