django nginx静态文件404

Mar*_*jus 15 python django nginx django-deployment

这是我的设置:

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
)

STATIC_ROOT = '/home/django-projects/tshirtnation/staticfiles'
Run Code Online (Sandbox Code Playgroud)

这是我的nginx配置:

server {
    server_name 77.241.197.95;

    access_log off;

    location /static/ {
        alias /home/django-projects/tshirtnation/staticfiles/;
    }

    location / {
        proxy_pass http://127.0.0.1:8001;
        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"';
    }
}
Run Code Online (Sandbox Code Playgroud)

我跑了python manage.py collectstatic,它已经复制了所有静态文件.我使用gunicorn_django --bind:my-ip:8001运行我的服务器,除静态文件外,一切似乎都在工作.

编辑:我跑了

sudo tail /var/log/nginx/error.log
Run Code Online (Sandbox Code Playgroud)

似乎没有找到静态文件的错误:/

pzt*_*ick 21

我遇到了同样的问题,并能够通过//static/位置删除尾随来修复我的nginx配置.

location /static {  # "/static" NOT "/static/"
    # ...
}
Run Code Online (Sandbox Code Playgroud)


Col*_*ney 5

尝试将^~前缀修饰符添加到您的静态位置以跳过检查正则表达式:

location ^~ /static/ {
    alias /home/django-projects/tshirtnation/staticfiles/;
}
Run Code Online (Sandbox Code Playgroud)


Eug*_*tov 0

我认为浏览器会尝试在以下位置找到您的静态信息:

http://127.0.0.1:8001/static/
Run Code Online (Sandbox Code Playgroud)

而nginx默认工作在80端口。

您需要在 nginx 配置中定义 8001 端口或在 80 端口上运行 django 服务器。