Nginx 自定义 error_page 和 php
Nginx custom error_page with php
我是 nginx 的新手,为了测试它,我从 Apache 迁移过来,剩下的就是设置自定义错误页面。
这些页面是 php 个文件(用于多语言目的),我已经尝试了 Whosebug 中的许多方法,但我不知道如何制作它。
其中一些是:
- nginx-php-fpm-custom-error-pages
- nginx-fastcgi-for-php-error-page
- nginx-error-pages-one-location-rule-to-fit-them-all
到目前为止,我已经创建了一个文件 /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;
}
}
我是 nginx 的新手,为了测试它,我从 Apache 迁移过来,剩下的就是设置自定义错误页面。
这些页面是 php 个文件(用于多语言目的),我已经尝试了 Whosebug 中的许多方法,但我不知道如何制作它。
其中一些是:
- nginx-php-fpm-custom-error-pages
- nginx-fastcgi-for-php-error-page
- nginx-error-pages-one-location-rule-to-fit-them-all
到目前为止,我已经创建了一个文件 /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;
}
}