这里是我的php-fpmconfiguration是:
location @site { fastcgi_pass unix:/var/run/php5-fpm.sock; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root/index.php; fastcgi_intercept_errors on; error_page 404 /404; }
由于启用了fastcgi_intercept_errors ,当我的PHP路由器返回404时,Nginx将redirect到/404 。 很好 。
但是由于/404是由我的PHP应用程序生成的,而且我的PHP应用程序正确设置了404响应代码,那么Nginx将尝试再次处理该错误! (这明显以循环结束)
有针对这个的解决方法吗?
nginx是这样做的,因为你告诉它。
fastcgi_intercept_errors on;
这意味着nginx不会提供PHP生成的错误响应,而是让nginx处理它们。 因此,你进入了无尽的循环。
要解决该问题,请删除此指令(默认为off )或将其明确设置为off 。
使您的脚本生成错误页面返回HTTP 200(即适当的页面),它应该马上工作。
nginx将检索/ 404的主体,并将更新响应状态为404。
PS作为一个奖励,你可能想定义一个明确的位置(例如位置= / 404),并在那里打开fastcgi_cache,所以你的PHP后端不会被查询每次你需要显示你的错误页面。