SmallStyle


2013-05-18

_ Nginx でログに残したくないデータをマスキングする

HTTPリクエストのGETパラメータで,ログとしては残しておきたくない値を,マスキングしたくなったので調べてみた.やりたいことは Rails の config.filter_parameters のような,ログファイルにパラメータ情報を出力しないようにすること.

タイミングよく,NginxのForumで同じことを質問している人がいて,その回答が参考になった.このまま利用すると,log_format を location ディレクティブに書くことになり,起動時に警告されるので気持ち悪い.なので log_format は http ディレクティブに以下のように定義する.

log_format  filter  '$remote_addr - $remote_user [$time_local] "$filtered_request" '
    '$status $body_bytes_sent "$http_referer" '
    '"$http_user_agent" "$http_x_forwarded_for"';

location ディレクティブ内では以下のように設定することで,警告も出ずに目的を達成することができた.

set $filtered_request $request;
if ($filtered_request ~ (.*)token=[^&]*(.*)) {
    set $filtered_request $1token=[FILTERED]$2;
}
access_log  /var/log/nginx/access.log  filter;

この設定ではリクエストパラメータにtokenが指定されていた場合に,その値については[FILTERED]に置き換えられることになる.

xxx.xxx.xxx.xxx - - [17/May/2013:01:23:45 +0000] "GET /api/v0/hoge?token=[FILTERED]&param1=xxx" 200 108 "-" "" ""

about me

いろいろと興味を持ったことを書いてます.ちょっとしたことは hb(@smallstyle) on Twitter で書いてます.

Archive

2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|12|