Django没有在生产中提供静态文件

时间:2018-04-16 05:22:54

标签: django nginx gunicorn

settings.py:

DEBUG = False

STATIC_ROOT = '/opt/app/statics/'

# URL prefix for static files.
# Example: "http://example.com/static/", "http://static.example.com/"
STATIC_URL = '/statics/'

# Additional locations of static files
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'statics'),)

urls.py

from django.contrib.staticfiles.urls import staticfiles_urlpatterns
import settings

if settings.DEBUG == True:
    urlpatterns += staticfiles_urlpatterns()

的/ etc / nginx的/位点可用的/应用

server {
    server_name xxx.xxx.xxx.xxx;

    access_log on;

    location /statics/ {
        alias /opt/app/statics/;
    }

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header X-Forwarded-Host $server_name;
        proxy_set_header X-Real-IP $remote_addr;
        add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
    }
}

/ etc / nginx / sites-enabled / app与网站中的完全相同 具有静态文件的文件夹已被授予最高权限(chmod 777)。

每当我尝试使用命令运行服务器时:

gunicorn -b 0.0.0.0:8000 example.wsgi:application

它实际上运行服务器,但不能正确地重定向到静态文件

3 个答案:

答案 0 :(得分:0)

请使用此:

root /opt/app/statics/;

代替:

alias /opt/app/statics/;

答案 1 :(得分:0)

如果您的root配置是这样的,

    location /static/ {
            root /opt/app/statics/;
    }

在这种情况下,Nginx将派生的最终路径为

/opt/app/statics/statics

这将返回404,因为静态/

中没有静态/

这是因为位置部分附加到根目录中指定的路径。因此,使用root,正确的方法是

location /static/ {
    root /opt/app/;
}

答案 2 :(得分:0)

我已经明白,每当我使用端口“8000”访问网站时,一切都运行得很好,但是如果我只是想用通常的端口“80”到达那里,静态文件就不会被传送。有人知道发生了什么事吗?