我已将 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。