2013-06-30 123 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; 
}