使用Nginx + Gunicorn + Django提供静态文件

时间:2013-06-30 14:54:58

标签: django nginx

这是我的nginx配置:

    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.非常感谢帮助。

2 个答案:

答案 0 :(得分:20)

您需要创建一个与您的django STATIC_URL的位置匹配的nginx位置块。正如您配置的那样,nginx还会将对静态资产的请求转发到您的django应用程序。我猜你在django应用程序日志中看到了404错误?您希望nginx处理这些请求,而不是django。

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

请务必运行django admin command collectstatic以确保将所有静态资源都复制到STATIC_ROOT目录。

答案 1 :(得分:1)

location / {
    try_files $uri @proxy_to_app;
}

请更改$uri -> $request_uri

location / {
    try_files $request_uri @proxy_to_app;
}