首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用nginx记录解析后的请求

使用nginx记录解析后的请求
EN

Stack Overflow用户
提问于 2012-04-06 16:58:46
回答 1查看 3.8K关注 0票数 2

如何设置nginx的自定义日志格式,让请求被解析,各个部分单独记录?

我们提供一个图片文件来计算邮件打开的数量。图片的url会有所不同,但遵循以下规则:

代码语言:javascript
复制
http://www.server.com/counter/XXXXX/YYYYY/dailymail.gif

XXXXX -电子邮件活动的id;YYYYY -收件人id。

对于/counter位置,有一个单独的日志,我想给出如下格式

代码语言:javascript
复制
XXXXX   YYYYY    DATETIME

Location部分如下所示

代码语言:javascript
复制
    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中有值。我如何在日志格式中使用它们?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-06 17:18:25

log_format指令只允许在http级别使用,因此您必须根据其他变量来定义它,例如

代码语言:javascript
复制
http {
  log_format tracking "$xxxx $yyyy $time_local";

稍后,在您所在的位置,只需设置这些变量并以tracking格式记录即可:

代码语言:javascript
复制
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):

代码语言:javascript
复制
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;
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10041271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档