nginxを取得してリクエストボディを条件付きで記録するのに問題があります。私はログイン資格情報をログに記録したくないので、URIがログインURIである/そうでないときに正しくトリガーするマップが含まれています。そこ
client_body_in_single_buffer on
fastcgi_pass php_cgi
echo_read_request_body
を使用して示唆同様のポストの数であるように思われるが、それらのどれも助けるように見えるん。何か案は?以下は現在の設定です。
map $request_uri $log_body {
~/login 0;
default 1;
}
log_format filter '$remote_addr - $remote_user [$time_local] '
'"$request" $status $request_time $upstream_response_time "$scrubbed_request"';
server {
listen 443 ssl;
server_name localhost;
ssl_certificate /etc/ssl/site.crt;
ssl_certificate_key /etc/ssl/site.key;
access_log /var/log/nginx/site.log filter;
location /branch/dev/v2/ {
set $scrubbed_request 'NOT LOGGED';
if ($log_body) {
set $scrubbed_request $request_body;
}
rewrite /branch/dev/(.*) /$1 break;
proxy_pass http://127.0.0.1:3001;
}
location /branch/dev/ {
rewrite /branch/dev/(.*) /$1 break;
proxy_pass http://127.0.0.1:4001;
}
}
$scrubbed_request
がLOG_FORMATラインに$request_body
に置き換えている場合、我々はすべてのリクエストボディをキャプチャしないことに注意してください。これは、set
ステートメントが予期しない方法で何とかrequest_body
を消費していると思うようになります。
私のリクエストボディが 'abcdef'のような小さな文字列だった場合、' client_body_in_single_buffer'を助けるのはどうでしょうか?それは、文字列が、64ビットのインスタンスのためにプロビジョニングされていると言っている16Kバッファに簡単に収まるように思えます。何か不足していますか? – Justin
@Justinあなたのリクエストボディがどれほど大きいかは述べていません。サイズは大丈夫ですので、 'set'を使わないでください。 'set'ディレクティブは、nginxが本文を読み始める前に動作するrewriteモジュールの一部です。 – VBart