上次的《Django靜態文件的配置》,說的主要是針對開發環境的配置。在開發中不免要處理網站的css js image等靜態文件,不用顧及性能,安全的問題,交給Django內部處理好了;但若是正式部署到服務器的時候,這樣的配置就會影響到性能和安全性了,這時怎麼辦呢?嗯,交給Nginx處理好了。
假如項目的目錄結構以下:
myproject
--app1
--app2
--media
----css
----js
----images
--templates
--setting.py
--urls.py
--manage.py
css
--...django
解釋:一般項目文件夾下有若干個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文件夾。app
2 還有一個值得注意的是:location ~ ^/media/ 要和實際的靜態文件夾對應哦,若是寫成location ~ ^/static/ 那確定不行的性能
(完)網站
http://2goo.info/blog/detail/533/url