Django可以单独使用Gunicorn(没有Apache或nginx)吗?

Sah*_*bov 14 python django nginx amazon-ec2 gunicorn

我在网上尝试了几乎每个django + nginx教程,我无法在屏幕上显示图像文件.它始终是老故事 - 404 PAGE NOT FOUND.网页加载正常,但我的/ static /文件夹中的django.png 没有.不确定它是否在settings.py或nginx中存在问题.

我很沮丧,我拒绝看另一个"如何获得nginx/django教程".如果我在不久的将来部署一个网站,Gunicorn是否足以运行Django站点并同时提供静态文件而不使用Apache或nginx?首先拥有反向代理有什么好处吗?

Lak*_*sad 10

是.Gunicorn也可以为你的静电服务.

如果所有其他方法都失败了,那么让django为你做(虽然这是在挫折之前做的最后一招.)为此,你只需要添加另一个url模式,如下所示:

urlpatterns = patterns('',
    # ... the rest of your URLconf goes here ...
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Run Code Online (Sandbox Code Playgroud)

虽然服务静态的django比不服务它更好,但是值得将它委托给为nginx优化的服务器.

我建议在另一个端口上运行nginx,然后更改django STATIC_URL设置以包含端口(在确认端口为静态提供服务之后). - 这样做就像从nginx文件夹中执行MEDIA_ROOT的simlink一样简单.

如果你正在使用nginx,使用它代理所有请求也是好的,并且只将django请求传递给gunicorn.所有这些要求是添加一个conf相应地告诉nginx 的文件.

我可以看到它是如何让那些正在开始并尝试一次完成所有事情(代理请求,静态服务,配置nginx)的人感到困惑.一个接一个地尝试一下.从枪声中获取媒体; 然后从nginx服务它,然后最终也有nginx代理.但是,在将应用程序投入生产之前,请执行此操作.我看到这种方法增加了理解并减少了挫败感.

  • 很好的建议一次尝试一个.谢谢. (2认同)
  • 如果我的服务器只做REST API,没有静态文件,没有负载平衡,有什么理由仍然在前面有_nginx_? (2认同)

Mar*_*vin 9

Gunicorn文档指出,如果没有代理缓冲慢客户端,默认工作人员容易受到拒绝服务攻击:http://gunicorn.org/deploy.html

虽然有许多HTTP代理可用,但我们强烈建议您使用Nginx.如果您选择其他代理服务器,则需要确保在使用默认的Gunicorn工作时缓冲客户端缓慢.如果没有这种缓冲,Gunicorn很容易受到拒绝服务攻击.您可以使用slowloris检查代理是否正常运行.

当使用gevent或tornado之类的异步工作程序时,情况可能并非如此.


And*_*rew 6

如果您已经在使用亚马逊网络服务,您可以使用s3存储桶来托管您的静态内容,并使用gunicorn(或任何您想要的)将您的应用部署到ec2.这样,您根本不必担心设置自己的静态文件服务器.


hur*_*urk 5

我推荐在前面使用 Nginx 有几个原因:

  • 当 gunicorn 宕机时,可以轻松实现维护或内部服务器错误页面。这意味着如果您的应用程序服务器没有运行,您将始终有一些响应。
  • 正如 Gunicorn文档所建议的那样,没有检测到诸如 DOS 之类的 http 攻击。
  • 您可能希望稍后实施自己的负载平衡策略。随着项目规模的扩大,这对于发布工程将变得更加重要。就个人而言,我发现 AWS ELB 有点不可靠,我正在考虑。

更新

另外,请参阅 Gunicorn 开发人员写得很好的答案:

为什么我需要 Nginx 和 Gunicorn 之类的东西?