让Nginx处理Django的静态文件

上次的《Django静态文件的配置》,说的主要是针对开发环境的配置。在开发中难免要处理网站的css js image等静态文件,不用顾及性能,安全的问题,交给Django内部处理好了;但如果正式部署到服务器的时候,这样的配置就会影响到性能和安全性了,这时怎么办呢?嗯,交给Nginx处理好了。


假如项目的目录结构如下:
myproject
--app1
--app2
--media
----css
----js
----images
--templates
--setting.py
--urls.py
--manage.py

--...

解释:通常项目文件夹下有若干个app应用,如app1 app2
我们把静态文件方在项目的根目录下,起名为media(这个可以任意起名,但顾名思义,起个明了的名字),media文件夹里分别新建 css,js,images文件夹,用他们放置样式,脚本,图片等用途。
剩下的就是Django生成的settings urls manage配置文件了。


这回计划在开发环境中,使用Django处理静态文件,而正式部署后使用Nginx来处理他们。


首先在urls.py文件中最后加上以上代码
if settings.DEBUG:    
    urlpatterns += patterns('',
url(r'^media/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': os.path.join(settings.SITE_ROOT,'media')},name="media"),
    )


具体的意思是:如果是开发环境,让Django的django.views.static.serve来处理,而正式部署时,Django不做任何事情,让Nginx来处理,后面会讲到Nginx的配置问题。




settings.DEBUG其实就是开发和部署的标示变量,部署的时候在settings里给DEBUG变量赋值False,让Django Templates屏蔽一切Debug;赋值True时,相反,是开启Debug,开发中出错以便查看一些错误信息。


开发环境中,settings的配置如下:
import os
DEBUG = True
TEMPLATE_DEBUG = DEBUG


SITE_ROOT=os.path.abspath(os.path.dirname(__file__))


MEDIA_ROOT = os.path.join(SITE_ROOT,'media')


MEDIA_URL = '/media/'


正式部署的时候,把变量DEBUG改成False即可。



正式部署的时候,Nginx的静态文件配置很关键,先看代码:


location ~ ^/media/ {         
        root /home/http/django_project/myproject/; 
expires 24h;
access_log   off;
    }


如项目实际路径是:/home/http/django_project/myproject/,那以上的配置代码会到 /home/http/django_project/myproject/ 路径找 media文件夹。一两点值得注意的:

1 刚开始一直没有配置成功,原因是root的没配置正确,写成 root /home/http/django_project/myproject/media/ 了, 导致Nginx老找不到media文件夹。

2 还有一个值得注意的是:location ~ ^/media/  要和实际的静态文件夹对应哦,如果写成location ~ ^/static/  那肯定不行的

(完)

http://2goo.info/blog/detail/533/

你可能感兴趣的:(让Nginx处理Django的静态文件)