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

我有Nginx安装程序来反向代理以.php结尾的所有文件。 在一些脚本中,我检查参数,并发送“406不可接受”作为一个通用的错误,这需要从Ajax的jQuery /拾起。 我可以改变这个错误,但我希望能够把它发送到客户端。 如果我发送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; 

Nginxconfiguration

  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; } 

协议后你缺less一个空格。

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

我看到了和你一样的结果。 由于空间不足,Nginx截获了这个响应,并给出了一个502错误页面。 当空间在那里时,它通过406。