2013-06-30 125 views
7

這是我的nginx的配置:提供靜態文件nginx的+ Gunicorn + Django的

server { 
     listen 80; 
     server_name localhost; 

     keepalive_timeout 5; 

     access_log /home/tunde/django-projects/mumu/nginx/access.log; 
     error_log /home/tunde/django-projects/mumu/nginx/error.log; 

     root /home/tunde/django-projects/mumu; 

     location/{ 
      try_files $uri @proxy_to_app; 
     } 

     location @proxy_to_app { 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
      proxy_set_header Host $http_host; 
      proxy_redirect off; 
      proxy_pass http://127.0.0.1:8000; 
     } 
    } 

我的settings.py樣子:

import os 
    settings_dir = os.path.dirname(__file__) 
    PROJECT_ROOT = os.path.abspath(os.path.dirname(settings_dir)) 

    STATIC_ROOT = '/home/tunde/django-projects/mumu/STATIC/' 
    STATIC_URL = '/static/' 

    STATICFILES_DIRS = (
    os.path.join(PROJECT_ROOT, 'static/'), 
    ) 

我supervisord.conf文件看起來像:

[program: mumu] 
command = /home/tunde/ENV1/bin/gunicorn -w 1 --bind=127.0.0.1:8000 mumu.wsgi:application 
directory = /home/tunde/django-projects/mumu/ 
stdout_logfile= /home/tunde/django-projects/mumu/supervisor/logfile.log 
stderr_logfile= /home/tunde/django-projects/mumu/supervisor/error.log 
user = tunde 

問題是靜態文件沒有得到服務,我不知道我做錯了什麼。像/static/css/styles.css這樣的網址會返回一個404.幫助將不勝感激。

回答

18

您需要創建一個與您的django STATIC_URL的位置相匹配的nginx位置塊。正如你所配置的那樣,nginx也將靜態資產請求轉發給你的django應用程序。我猜你在django應用程序日誌中看到了404錯誤?你想讓nginx處理這些請求,而不是django。

location /static { 
    alias /home/tunde/django-projects/mumu/STATIC/; 
} 

確保運行django admin commandcollectstatic,以確保所有的靜態資產被複制到STATIC_ROOT目錄。

+0

感謝@scott由於使用Django某種程度上忽略存儲在一個名爲「靜態」文件夾中的靜態文件的上一次的經驗,我決定改變位置和名稱我的靜態文件。在nginx重新啓動後,我的配置工作,而不必添加您的建議位置塊。 – Tundebabzy

+0

當你看你的主管日誌文件時,你看到靜態(img,css,javascript)文件的請求嗎? –

+0

我的logfile.log即在supervisord.conf中的stdout_logfile是完全爲空的 – Tundebabzy

0
location/{ 
    try_files $uri @proxy_to_app; 
} 

請更改$uri -> $request_uri

location/{ 
    try_files $request_uri @proxy_to_app; 
}