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

2023-11-22

我正在尝试创建一些自定义错误页面,但似乎无法让 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$但同样的情况也会发生。有什么想法为什么自定义 500 页面不起作用吗?

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


你缺少的部分是fastcgi_intercept_errors指示。如果没有这个指令,Nginx 不会接触来自 CGI 后端的响应,只要它们有效:

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

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

fastcgi_intercept_errors on;

顺便说一句,您可能不需要=在你的错误页面线(取决于您的预期用途)。此语法指示 Nginx 使用从您指向的 PHP 脚本返回的响应代码,而不是原始响应代码:

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nginx、PHP + FPM 自定义错误页面 的相关文章

随机推荐

  • Swift 3:URLSession / URLRequest 不起作用

    我仍在尝试将我们的应用程序从 Swift 2 转换为 Swift 3 因为我们所有的 Apple 设备现在都运行 iOS 10 所以我被迫这样做 我已经完成了代码转换 并认为我做得很好 但是 在尝试调试我的 JSON 问题 发布在另一个问题
  • CodeIgniter:无法加载请求的文件:

    嗨 我是 codeigniter 的新手 我的网站可以在本地运行 但是当我上传时 出现以下错误 遇到错误 无法加载请求的文件 home home view php 这是我的控制器
  • Java 是否像 C++ 一样有未定义的行为?

    未定义的行为和序列点 上面的链接讨论的是C 中的序列点和副作用 简而言之 这意味着在两个序列点之间 如果我们有多个副作用 则副作用的顺序是未指定的 例如 int x 1 int y 2 int z x y 我们可以确定的是z等于3 之后z得
  • Matlab - 计算大稀疏(A'*A)矩阵的最大特征值

    我有一个大 400K 400K 稀疏矩阵 我需要计算的最大特征值A A 问题是由于内存问题 Matlab 甚至无法计算 A 我也尝试过 a b c find A 然后通过创建转置稀疏矩阵进行转置 但是尽管find 有效 但 sprase 创
  • 如何在 Windows 7 的登录屏幕上显示 UI

    我想在登录前屏幕 用户通常输入用户名 密码的屏幕 上显示与用户交互的 UI我读到 Winlogon 软件包的体系结构已更改 并且在 Windows 7 中对我没有帮助 有人建议我使用 WTS 功能 但我仍然不清楚如何使用它们或使用哪些功能
  • 如何使用 python 和 matplotlib 注释行尾?

    使用数据框和基本图 如下所示 import pandas as pd import numpy as np import matplotlib pyplot as plt np random seed 123456 rows 75 df p
  • 错误:View android.widget.ListView 不是滑动抽屉

    我在用NavigationDrawer在我的 Android 应用程序中 我也制作了自己的自定义布局 XML 文件及其适配器 但是当我运行我的程序时 我的应用程序崩溃并显示以下日志 我无法追踪其原因 有什么建议吗 活动主文件
  • 将序列链接到 hsqldb 中的标识

    在PostgreSql中 我们可以定义一个序列并将其用作表的主键 在 HsqlDB 中 我们仍然可以创建一个不链接到任何用户定义序列的自动增量标识列 是否可以使用用户定义的序列作为HsqlDB中自增标识列的生成器 PostgreSql 中的
  • Unity3D-获取组件

    在Unity3D中获取组件的最简单方法是什么C My case GameObject gamemaster C script MainGameLogic cs attached to gamemaster A boolean backfac
  • 编译器在运行前将 Java 字节码转换为与平台无关的 C 代码?

    我正在寻找一个编译器 可以在运行之前将 Java 字节码转换为独立于平台的 C 代码 提前编译 然后 我应该能够使用标准 C 编译器将 C 代码编译为目标平台的可执行文件 据我了解 这种方法仅适用于某些不经常修改的 Java 应用程序 那么
  • 如何在现代 C++ 中将 float 转换为 int

    尽管看起来很奇怪 但我找不到如何干净地转换float to an int 这种技术 int int value int float value 0 5 触发一个 warning use of old style cast in gcc 那么
  • Java中对象的内存消耗是多少?

    一个具有 100 个属性的对象所消耗的内存空间与 100 个对象 每个对象各有一个属性 所消耗的内存空间相同吗 为一个对象分配了多少内存 添加属性时使用了多少额外空间 Mindprod指出这不是一个容易回答的问题 JVM 可以自由地以任何内
  • 日期在 mysql 中插入为 0000-00-00 00:00:00

    My date输出在 foreach 循环中 2011年9月25日 2011年2月13日 2010年9月15日 2010年6月11日 2010年4月13日 2010年4月13日 2010年4月13日 09 09 24 02 19 09 12
  • 如何在 azure linux 托管的 Web 应用程序上运行 cronjobs?

    在 azure 上的 Linux Web 应用程序上找不到 Crontab 命令 我正在尝试为 Laravel 应用程序安排 cronjob 我正在尝试为我的 laravel web 应用程序运行一个 cronjob 在线解决方案建议我为此
  • R中如何合并两行?

    我想根据行名组合 求和两行 以在 R 中生成一行 最好的路线可能是创建一个新行并将两行求和在一起 示例 df A 1 3 4 6 B 3 2 7 9 C 6 8 1 2 D 3 2 8 9 其中 A B C D 是行名 我想将两行 A 和
  • Java XML:ClassCastException DeferredTextImpl

    这是我的代码 get the factory DocumentBuilderFactory dbf DocumentBuilderFactory newInstance try Using factory get an instance o
  • 从 MatPlotLib 画布获取二进制图像数据?

    我试图从 matplotlib 画布中获取二进制数据 以便将其附加到电子邮件中 但我发现这样做的唯一方法是说 filename image png canvas print figure filename with open filenam
  • 如何将该程序从 conio 移植到curses?

    我在 Windows 上编写了这个简单的程序 由于Windows有conio 所以它工作得很好 include
  • 将 Equinox OSGi 集成到 Apache Tomcat Web 应用程序中

    是否可以将 osgi equinox 引入到现有的 java Apache Tomcat 项目中 根据我的理解 OSGI 必须在某种 容器 内运行 我将如何整合它 我也在使用Jersey用于 RESTful 资源 您可能想看看这个问题 传统
  • Nginx、PHP + FPM 自定义错误页面

    我正在尝试创建一些自定义错误页面 但似乎无法让 500 页面正常工作 我有以下配置 server listen 80 root var www devsite index index php server name devsite erro