[英]Can Django run on Gunicorn alone (no Apache or nginx)?
我在网上尝试了几乎每个django + nginx教程,我无法在屏幕上显示图像文件。 它始终是老故事 - 404 PAGE NOT FOUND 。 网页加载正常但我的/ static /文件夹中的django.png没有。 不确定它是否在settings.py或nginx中存在问题。
我很沮丧,我拒绝看另一个“如何获得nginx / django教程”。 如果我在不久的将来部署一个网站,Gunicorn是否足以运行Django站点并同时提供静态文件而不使用Apache或nginx? 首先拥有反向代理有什么好处吗?
Gunicorn文档指出,如果没有代理缓冲慢客户端,默认工作人员容易受到拒绝服务攻击: http : //gunicorn.org/deploy.html
虽然有许多HTTP代理可用,但我们强烈建议您使用Nginx。 如果您选择其他代理服务器,则需要确保在使用默认的Gunicorn工作时缓冲客户端缓慢。 如果没有这种缓冲,Gunicorn很容易受到拒绝服务攻击。 您可以使用slowloris检查代理是否正常运行。
当使用gevent或tornado之类的异步工作程序时,情况可能并非如此。
是。 Gunicorn也可以为你的静电服务。
如果所有其他方法都失败了,那就让django为你做(虽然这是在挫折之前做的最后一招。)为此,你只需要添加另一个url模式,如下所示:
urlpatterns = patterns('',
# ... the rest of your URLconf goes here ...
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
虽然服务静态的django比不服务它更好,但是值得将它委托给为nginx优化的服务器。
我建议在另一个端口上运行nginx,然后更改django STATIC_URL设置以包含端口(在确认端口为静态提供服务之后)。 - 这样做就像从nginx文件夹中执行MEDIA_ROOT的simlink一样简单。
如果你正在使用nginx,使用它代理所有请求也是好的,并且只将django请求传递给gunicorn。 所有这些要求是添加一个conf
文件,相应地告诉nginx。
我可以看到它是如何让那些正在开始并尝试一次完成所有事情(代理请求,静态服务,配置nginx)的人感到困惑。 一个接一个地尝试一下。 从枪声中获取媒体; 然后从nginx服务它,然后最终也有nginx代理。 但是,在将应用程序投入生产之前,请执行此操作。 我看到这种方法增加了理解并减少了挫败感。
如果您已经在使用亚马逊网络服务,您可以使用s3存储桶来托管您的静态内容,并使用gunicorn(或任何您想要的)将您的应用部署到ec2。 这样,您根本不必担心设置自己的静态文件服务器。
我建议在前面使用Nginx有几个原因:
更新 :
另外,请看一个Gunicorn开发人员写得很好的答案:
我使用Werkzeug中间件制作。 使用nginx服务器并不漂亮,也不高效,但完成工作:
在settings.py上设置STATIC_ROOT
# project/settings.py
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__)))
STATIC_ROOT = BASE_DIR+'/static-collected'
告诉Werkzeug从这个文件夹中提供文件
# project/wsgi.py
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
(...)
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
(...)
import os
from werkzeug.wsgi import SharedDataMiddleware
print 'Installing WSGI static files server middleware'
application = SharedDataMiddleware(application, {
'/static': os.path.join(BASE_DIR, 'static-collected'),
})
当DEBUG = True时,Django会提供文件。 当DEBUG = False时,Werkzeug从静态收集的文件夹中提供文件。 您需要在使用DEBUG = False的服务器上运行collectstatic才能使用它。
Obs:出于某种原因,Werkzeug为未找到的文件提供500,而不是404.它很奇怪,但仍然有效。 如果您知道原因,请发表评论。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.