为什么我的自定义Apache错误页面不显示?

为什么我的自定义Apache错误页面不显示?,apache,mod-wsgi,Apache,Mod Wsgi,我有一个mod_wsgi应用程序在Apache2下运行,无论何时出现未捕获的异常,都会显示默认的Apache HTTP 500错误页面,尽管我的Apache配置中有ErrorDocument 500/500.html 是否有一些mod_wsgi指令可用于显示自定义错误页面?我不是在寻找我可以在mod_wsgi脚本中放入的东西,因为如果脚本中有错误,这将不会有帮助 编辑2:使用以下配置时,浏览到/cgi-bin/test.wsgi会成功显示自定义错误页面,但浏览到/test会显示默认的Apache

我有一个mod_wsgi应用程序在Apache2下运行,无论何时出现未捕获的异常,都会显示默认的Apache HTTP 500错误页面,尽管我的Apache配置中有ErrorDocument 500/500.html

是否有一些mod_wsgi指令可用于显示自定义错误页面?我不是在寻找我可以在mod_wsgi脚本中放入的东西,因为如果脚本中有错误,这将不会有帮助

编辑2:使用以下配置时,浏览到/cgi-bin/test.wsgi会成功显示自定义错误页面,但浏览到/test会显示默认的Apache错误页面

编辑:下面是一个小样本配置,它给了我同样的问题:

/etc/apache2/站点启用/测试

/path/to/docroot/500.html


使用Apache配置时,URL/500.html映射到什么

如果它没有映射到一个有效的URL,因此试图对其发出子请求会生成一个404,那么Apache将从那里返回一个通用的500响应


查看访问日志中的/500.html访问,看看它是否表示404。

默认情况下,WSGI应用程序完全控制请求和响应周期,因此将绕过任何Apache错误处理程序

在Apache设置工作之前,您可能需要一个wsgierrorverride On指令。我自己还没有尝试过这一点,但在追踪ops团队的类似目标建议时,当Django应用程序给出500分时,Apache返回其自己的静态错误页面,我通过via发现了这一点,目标相反

将此功能添加到mod_wsgi时,其主要功能是:

对于mod_proxy,存在ProxyErrorOverride指令, 这允许我们说您需要后端生成的错误页面 适当时忽略应用程序,并允许Apache生成 内容通过其正常的ErrorDocument指令

应执行等效的WSGierrorverride指令,以允许 将WSGI应用程序更好地安装到WSGI所在的大型站点中 应用程序不是内容的唯一来源,只是一个贡献者


所以这听起来确实像是我们在追求的。请注意,这是添加到mod_wsgi版本3.0及更高版本中的,希望它已经存在足够长的时间,可以普遍使用。

不,任何日志中都没有404,并且500.html位于在ErrorDocument之前指定的DocumentRoot中。我已尝试将ErrorDocument更改为绝对URL,但这也不起作用。但如果您有WSGIScriptAlias for/则会覆盖并隐藏DocumentRoot。你需要使用别名/500.html/some/path/foo.htmlI我没有使用WSGIScriptAlias,直接向文件中添加别名也不起作用。那么你是如何配置mod_wsgi来承载你的wsgi应用程序的呢?WSGIDaemonProcess,AddHandler wsgi script,请记住,只有在使用mod_wsgi守护进程模式时,wsgierrorverride才有效。
<VirtualHost *:80>
    ServerName foo.example.com

    DocumentRoot /path/to/docroot/

    <Directory /path/to/docroot/>
        Order allow,deny
        Allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /path/to/docroot/cgi-bin/

    <Directory /path/to/docroot/cgi-bin/>
        Options +ExecCGI
        AddHandler wsgi-script .wsgi
        Order allow,deny
        Allow from all
    </Directory>

    ErrorDocument 500 /500.html

    WSGIDaemonProcess test user=www-data group=www-data processes=4 threads=1 display-name=%{GROUP}
    WSGIProcessGroup test
</VirtualHost>
RewriteEngine on
RewriteBase /

RewriteRule ^test/?$    /cgi-bin/test.wsgi/    [L,QSA]
<html><body>This be 500.</body></html>
hi