繁体   English   中英

Nginx,PHP + FPM自定义错误页面

[英]Nginx, PHP + FPM Custom Error Pages

我正在尝试创建一些自定义错误页面,但似乎无法使500工作。

我有以下配置:

server {
    listen 80;

    root /var/www/devsite;
    index index.php;
    server_name devsite;

    error_page 403 = /error.php?code=403;   
    error_page 404 = /error.php?code=404;
    error_page 500 = /error.php?code=500;

    location / {
        try_files $uri =404;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }

}

起初,我认为这可能是因为它是一个PHP文件所以我改变了:

error_page 500 = /error.php?code=500;

到静态页面:

error_page 500 /500.html

但是当我打破一些PHP代码来触发它时,它仍然只显示一个带有500响应代码的空白页面。

然后我试着让它成为location ~ \\.php$内的最后一条规则,但同样的情况location ~ \\.php$发生。 任何想法为什么自定义500页不起作用?

我还注意到,如果您尝试访问具有.php扩展名的“访问被拒绝”文件,它将不会显示自定义403页面并显示内置页面。 有没有办法让规则覆盖.php文件呢?

你缺少的那个是fastcgi_intercept_errors指令。 如果没有此指令,Nginx将不会触及来自CGI后端的响应,只要它们有效:

确定代码大于或等于300的FastCGI服务器响应是应该传递给客户端还是重定向到nginx以便使用error_page指令进行处理。

您需要将以下内容放在PHP处理位置:

fastcgi_intercept_errors on;

另外,您可能不需要在error_page行中使用= (取决于您的预期用途)。 此语法指示Nginx使用从您指向的PHP脚本返回的响应代码而不是原始响应代码:

如果代理服务器或FastCGI服务器处理错误响应,并且服务器可能返回不同的响应代码(例如,200,302,401或404)......用它返回的代码进行响应。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM