Django在Nginx和Apache上的使用:404和500错误应该在哪里处理?

4
我知道Django中有404错误处理的功能,但是把配置放在Nginx中会更好吗?
这个ST线程提供了如何放置配置的解决方案: https://dev59.com/OXNA5IYBdhLWcg3wSrua 当使用Nginx时是否每个人都是这样处理的? 我已经在站点主题中创建了自己的404.html和500.html,想要显示它们。

特别是对于404页面,我认为使用django来显示更有意义,因为我发现使用django提供的功能(例如模板标签)生成导航等在上面非常有用。 - Bernhard Vallant
我的想法是在Django中不添加任何逻辑。如果发生404错误,Web服务器应该检测到并显示我的静态页面。500错误也是如此。 - PlanetUnknown
3个回答

4
我不知道如何在Django中配置404和500错误页面。 感谢“namnatulco”的帮助。
以下是步骤:
1.创建两个页面404.html500.html。 2.将它们放置在您的模块模板文件夹中。 3.在您的模块urls.conf中,输入以下两行:
handler404 = "myproject.mymodule.views.redirect_page_not_found"   
handler500 = "myproject.mymodule.views.redirect_500_error"
4.在您的视图中,定义以下函数:
def redirect_page_not_found(request):
  return render_to_response('logreg/404.html', {}, context_instance=RequestContext(request));     
def redirect_500_error(request):
  return render_to_response('logreg/500.html', {}, context_instance=RequestContext(request));     
5.通过提供一些不正确的URL(例如:www.mydomain.com/aaaaaaaaaaaaaaaa)来测试它。 6.要测试500错误,请在您的视图中,在render_to_response中提供一个不正确的URL。
就这样。您应该已经设置好了。

3

您没有提到为什么要将这些页面放在 Nginx 服务器上。我建议将它们与您的网站其余部分一起放在 Django 服务器上。将网站的一部分移动到 Nginx 服务器上是解决可扩展性问题的好方法,但会使部署变得复杂。我希望您不会看到网站流量的大部分都进入错误页面!


谢谢,那很有道理。另外,#django上的朋友们帮助我了解到我可以个性化定制它。我会在下面放置我的实现方式。但我会选择这个作为答案。 - PlanetUnknown

1

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

请确保不要返回一个谈论错误但状态码为200的页面 - 人类会理解这是一个错误,但编程访问将不会。我避免在这里说“搜索引擎”,但事实是,它们可能代表您非人类访问者的98%以上。有关详细信息,请参见HttpResponse子类


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接