nginx 和 apache 上的 django:在哪里处理 404 和 500 错误?

Posted

技术标签:

【中文标题】nginx 和 apache 上的 django:在哪里处理 404 和 500 错误?【英文标题】:django on nginx & apache : where to handle 404 & 500 error? 【发布时间】:2011-04-16 22:03:24 【问题描述】:

我知道 django 中有 404 错误处理。 但是将配置放在 nginx 中更好吗?

这个ST线程有放置它的解决方案。 - http://***.com/questions/1024199/nginx-customizing-404-page

大家在使用 nginx 时都是这样处理的吗? 我在站点主题中创建了自己的 404.html 和 500.html,想要显示它们。

【问题讨论】:

特别是对于 404 页面,使用 django 显示它对我来说更有意义,因为我发现它对例如有用。上面有一个导航,它是使用 django 提供的功能(例如模板标签)生成的。 我的想法是不要在 django 中添加任何逻辑。如果发生 404,网络服务器应该检测到它并显示我的静态页面。 500 也一样。 【参考方案1】:

您没有提到将这些页面放在 Nginx 服务器中的任何原因。我建议将它与您网站的其余部分一起保存,即在 Django 服务器上。将站点的一部分移动到 Nginx 服务器是解决可伸缩性问题的好主意,但会使您的部署复杂化。我当然希望您的网站流量中不会有很大一部分流向您的错误页面!

【讨论】:

谢谢,这是有道理的,#django 上的人们也帮助我了解我可以很好地自定义它。我将在下面说明我是如何实现它的。但会选择这个作为答案。【参考方案2】:

我不知道如何在 django 中配置 404 和 500 错误。 感谢帮助我的“namnatulco”。

步骤如下:

    创建2页404.html & 500.html 将它们放在您的模块模板文件夹中

    在您的模块urls.conf 中,输入这两行:

    handler404 = "myproject.mymodule.views.redirect_page_not_found" handler500 = "myproject.mymodule.views.redirect_500_error"

    在你看来,定义函数

    def redirect_page_not_found(请求): return render_to_response('logreg/404.html', , context_instance=RequestContext(request)); def redirect_500_error(请求): return render_to_response('logreg/500.html', , context_instance=RequestContext(request));

    通过提供一些不正确的 URL 来测试它,例如- www.mydomain.com/aaaaaaaaaaaaaaaa

    要测试 500 错误,请在您的视图中,在您的 render_to_response 中,提供一个不正确的 URL。

就是这样。你应该准备好了。

【讨论】:

【参考方案3】:

我建议使用 Django 内的 404/500 处理程序。您可以以与您网站的其余部分一致的页面样式提供有意义的替代导航建议。

确保您返回一个页面谈论关于错误但返回状态为 200 的页面——人类会理解这是一个错误,但程序访问不会。我在这里避免说“搜索引擎”,但事实是它们可能代表 98% 以上的非人类访问者。详情请见HttpResponse subclasses。

【讨论】:

以上是关于nginx 和 apache 上的 django:在哪里处理 404 和 500 错误?的主要内容,如果未能解决你的问题,请参考以下文章

Apache/MySQL 上的 Django 内存泄漏

Django、Apache 和 Nginx 的配置

Django、Apache2 和 Nginx:加载时间长

nginx 对django项目的部署

Django部署Nginx服务器

django 在 apache 和 nginx 上提供媒体文件