我正在测试nginx,并希望将变量输出到日志文件。我该怎么办,它将去哪个日志文件(访问或错误)。

#1 楼

您可以通过标头发送nginx变量值。方便开发。

add_header X-uri "$uri";


,您会在浏览器的响应标题中看到:

X-uri:/index.php


我有时会在当地发展。

告诉您子节是否正在执行也很方便。只需将其撒在子句中即可查看它们是否被使用。

location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt)$ {
    add_header X-debug-message "A static file was served" always;
    ...
}

location ~ \.php$ {
    add_header X-debug-message "A php file was used" always;
    ...
}


因此访问类似http://www.example.com/index.php的网址将在访问http://www.example.com/img/my-ducky.png时触发后一个标头。

评论


请注意,add_header仅适用于成功的请求。文档指出,它只能应用于代码为200、204、301、302或304的响应。因此,它不能用于调试HTTP错误。

–John WH Smith
2014年8月25日14:43

@JohnWHSmith:正如在此答案中提到的马拉。从1.7.5版开始,nginx在add_header中添加了一个“ always”参数,无论响应代码是什么,该参数都会返回header。因此,例如,始终使用add_header X-debug-message“使用了php文件”,即使对于500个错误代码也应起作用。

– yuvilio
2015年9月22日在20:24



这根本无法回答问题。那个家伙想登录到日志文件而不是到客户端。

–阿凡达
18年4月17日在11:31



哦,好用。谢谢

–肖恩
20年4月8日在3:23

#2 楼

您可以返回一个简单的字符串作为HTTP响应:

location /
{
    return 200 $document_root;
}


请注意,如果您不想更改页面标题,则必须访问以.html结尾的页面。 br />

评论


如果要返回两个变量值怎么办?

–BringBackCommodore64
18年3月16日在16:41

转到该位置会立即打开浏览器的“另存为”对话框(已在Opera,Chromium上测试)。没有任何回应。

–BringBackCommodore64
18年3月16日在17:27

@ BringBackCommodore64添加文本/ html Content-Type标头可能会有所帮助。

–CuriousGeorge
19年5月9日在20:26

使用Postman,此方法无需任何其他标题。谢谢!

– aexl
19-10-7在8:10

我想返回多个变量并像这样解决它; return 200“ xforwardedfor:$ proxy_add_x_forwarded_for--remote_addr:$ remote_addr--scheme:$ scheme--host:$ host”;

– Kursat Sonmez
20-11-27在13:15



#3 楼

您可以使用log_format指令设置自定义访问日志格式,该指令记录您感兴趣的变量。

评论


谢谢,我想没有简单的方法可以自行输出一个变量了?

–卢拉拉
2012年7月4日在5:39

@lulalala我不知道。

–mgorven
2012年7月4日在5:42

可以将指令error_log中的日志级别设置为debug,以便您可以查看变量的值以及正在执行的块。示例error_log file.log调试

– Victor Aguilar
17年1月10日,0:55

请注意,日志中的空变量显示为-,但在nginx代码中确实为空,您随时都不应检查-。这有时会使用户感到困惑。

– higuita
17年5月5日,12:56

#4 楼

另一种选择是在构建nginx时包含echo模块,或安装nginx捆绑有大量扩展程序的OpenResty(例如echo)。

然后,您可以简单地在配置中添加如下语句:

echo "args: $args"


评论


当我尝试此操作时,它会回显到服务器上的纯文本文件,从而中断实际页面的输出。

– JaredMcAteer
2015年5月7日17:36

开发中有一个echo_log指令。

–加雷斯
17年7月14日在16:16

@Gajus三年后,我用谷歌搜索了此内容,但找不到任何有关echo_log的信息。您知道它是否脱离开发了吗?

–兰德尔
20-10-30在18:14