2

リクエストが解析され、その部分が個別にログに記録されるように、nginx のカスタム ログ形式を設定する方法は?

メールの開封数をカウントするために画像ファイルを提供しています。画像への URL はさまざまですが、次の規則に従います。

http://www.server.com/counter/XXXXX/YYYYY/dailymail.gif

XXXXX - メール キャンペーンの ID。YYYYY - 受信者 ID。

場所には別のログがありますが、次の/counterような形式にしたいと思います

XXXXX   YYYYY    DATETIME

ロケーションセクションは次のようになります

    location    ~* ^counter/([0-9]+)/([^/]+)/dailymail\.gif$ {
        access_log /var/log/mailopened.log
        alias /var/www/site.com/1x1.gif?cid=$1&uid=$2&type=daily;
    }

したがって、変数 $1 と $2 に値があります。それらをログ形式で使用するにはどうすればよいですか?

4

1 に答える 1

5

log_formatディレクティブはhttpレベルでのみ許可されるため、他の変数に関して定義する必要があります。

http {
  log_format tracking "$xxxx $yyyy $time_local";

後で、自分の場所でこれらの変数を設定し、次のtracking形式でログインします。

location ~* ^counter/([0-9]+)/([^/]+)/dailymail\.gif$ {
  set $xxxx $1;
  set $yyyy $2;
  access_log /var/log/mailopened.log tracking;
  alias /var/www/site.com/1x1.gif?cid=$1&uid=$2&type=daily;
}

最近のバージョンの Nginx と PCRE ライブラリでは、呼び出しを省略setしてキャプチャに明示的に名前を付けることができますlocation(@kolbyjack に感謝):

location ~* ^counter/(?<xxxx>[0-9]+)/(?<yyyy>[^/]+)/dailymail\.gif$ {
  access_log /var/log/mailopened.log tracking;
  alias /var/www/site.com/1x1.gif?cid=$1&uid=$2&type=daily;
}
于 2012-04-06T09:18:25.127 に答える