Nginx 自定义 error_page 和 php

Nginx custom error_page with php

我是 nginx 的新手,为了测试它,我从 Apache 迁移过来,剩下的就是设置自定义错误页面。

这些页面是 php 个文件(用于多语言目的),我已经尝试了 Whosebug 中的许多方法,但我不知道如何制作它。

其中一些是:

到目前为止,我已经创建了一个文件 /etc/nginx/common/default-error-pages.conf 以将其包含在虚拟主机中。此文件包含:

error_page 400 /error/400.php;
error_page 401 /error/401.php;
error_page 403 /error/403.php;
error_page 404 /error/404.php;

error_page 500 /error/500.php;
error_page 503 /error/503.php;

location /error/ {
    alias /var/www/error/;
    autoindex on;
}

location ~ \.php$ {
    root /var/www/error/;
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php7.2-fpm.sock;

    # fastcgi_intercept_errors on;
}

php 文件位于 /var/www/error 如果我启用自动索引,我可以从浏览器查看所有文件,但如果我点击其中任何一个,默认的 404 页面已显示。

我已经为其中一个文件创建了一个指向测试站点的符号链接,并且即使css按预期加载,它也能正确执行。

我试过嵌套位置并将此配置文件包含在站点 server 块的顶部。

如果我将 php 错误文件的扩展名更改为 html,它们将得到正确处理。

nginx 站点与此类似(文件已简化):

server {
        listen 4430 ssl http2 default_server;
        listen [::]:4430 ssl http2 default_server;
        server_name test.local;

        root /var/www/html;
        index index.php index.html;
        # execute php files "helper"
        include common/php-files.conf;
        fastcgi_hide_header X-Powered-By;
        include common/default-error-pages.conf;

        location / {
                # autoindex on;
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }
}

应该如何配置?我已经更改了很多次,以至于我不知道还能尝试什么。

Nginx 日志文件未显示任何意外 error/configuration.

提前致谢

我在 post 下面的评论中 Richard Smith 说错了 root

将其更改为建议的后,一切正常。

我还嵌套了 location 块,以便正确处理 php 文件,因为正在使用 fastcgi_intercept_errors on; 处理其他文件以捕获 http 错误。

因此配置保持为:

error_page 403 /error/403.php;
error_page 404 /error/404.php;

error_page 500 /error/500.php;
error_page 503 /error/503.php;

location /error/ {
    root /var/www/;
    try_files $uri $uri/ =404;

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
        fastcgi_intercept_errors off;
    }
}