让 Nginx 从 PHP-FPM 发送 4xx/5xx 错误

让 Nginx 从 PHP-FPM 发送 4xx/5xx 错误

我已将 Nginx 设置为反向代理所有以 .php 结尾的文件。在某些脚本中,我检查参数并发送“406 Not Acceptable”作为一般错误,需要在 jQuery/Ajax 上拾取。我可以更改错误,但我希望能够将其发送到客户端。如果我发送 406,Nginx 会将其更改为 502 Bad Gateway 并注入它自己的错误消息。

虽然它适用于 404 和 403,但这些错误在这种情况下实际上并不“适用”;它是一个 API,因此禁止并不是好的 RESTful 实践。

我尝试使用fastcgi_intercept_errors但这似乎没有什么区别。

我在用着Nginx 0.7

PHP 部分:

header($_SERVER['SERVER_PROTOCOL'] . '406 Not Acceptable');
echo '{"error":"Missing Params"}';
exit;

Nginx 配置

    location ~ .php$ {
            fastcgi_intercept_errors on;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
    }

答案1

协议后缺少一个空格。

header($_SERVER['SERVER_PROTOCOL'] . ' 406 Not Acceptable'); //This works
header($_SERVER['SERVER_PROTOCOL'] . '406 Not Acceptable'); //This doesn't work.

我得到的结果和你看到的一样。由于缺少空格,Nginx 拦截了响应并给出了 502 错误页面。当有空格时,它会传递 406。

相关内容