我是nginx的新手,为了对其进行测试,我从Apache迁移而来,剩下的就是设置自定义错误页面。
这些页面是php文件(出于多语言目的,我已经尝试了StackOverflow的许多方法,但我不知道该怎么做。
其中一些是:
到目前为止,我已经创建了一个文件/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日志文件未显示任何意外的错误/配置。
提前感谢
我在帖子下方评论中告诉root
,我错了Richard Smith。>
将其更改为建议的名称后,它们都正常运行了。
我还嵌套了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;
}
}