我们在Ubuntu 16.04上有一个非常繁忙的网站,有nginx,php-fpm(7)。
我们希望仅在php(http状态代码404,500,...)中发生错误时存储日志,因此我们在服务器配置中设置此项:
set $logit 0;
if ($status ~ ^[45]) {
set $logit 1;
}
access_log /var/log/nginx/xxx.access condensed if=$logit;
但我们没有存储错误:(。
当我们启用调试模式时,我们会看到:
2016/08/01 16:55:37 [debug] 28852#28852: *7258 http script if
2016/08/01 16:55:37 [debug] 28852#28852: *7258 http script if: false
2016/08/01 16:55:37 [debug] 28852#28852: *7258 http script var
2016/08/01 16:55:37 [debug] 28852#28852: *7258 http script var: "000"
2016/08/01 16:55:37 [debug] 28852#28852: *7258 http script regex: "^[45]"
2016/08/01 16:55:37 [notice] 28852#28852: *7258 "^[45]" does not match "000", client: 87.138.160.167, server: xxx, request: "GET / HTTP/1.1", host: "xxx"
2016/08/01 16:55:37 [debug] 28852#28852: *7258 http script if
因此,在if语句中,$ status被评估为“000”
当我添加它进行调试时:
add_header test-debug $status always;
我得到test-debug:404
我想问题是这是php-fpm的代理,所以状态只是稍后由php-fpm的响应设置,但是找不到要测试的变量?