Django/Nginx:不提供静态文件

Django/Nginx: statics files are not served

我尝试使用 Nginx 在远程服务器上部署我的 Django 项目,但我的文件没有提供。

我想我的路径不正确,但真的不知道为什么...

python3 manage.py collectstatic 获取 intensecov_static 文件夹中的所有文件。

/home/zebra/

- intensecov_app
    - intensecov
        - coverage (project)
        - manage.py
        - static
        - ...
- intensecov_static
    - css
       - style.css
    - images
    - ...

settings.py

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR,'static'),
    os.path.join(BASE_DIR,'randomization_management/static'),
    os.path.join(BASE_DIR,'randomization_settings/static'),
    os.path.join(BASE_DIR,'randomization/static'),
)

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

STATIC_ROOT = '/home/zebra/intensecov_static'

/etc/nginx/sites-available/intensecov

server {
        listen 80;
        server_name 192.168.80.9;
        root /home/zebra/intensecov_app;

        location /static {
                alias /home/zebra/intensecov_static;
        }

        location / {
                proxy_set_header Host $http_host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_redirect off;
                if (!-f $request_filename) {
                        proxy_pass http://127.0.0.1:8000;
                        break;
                }
        }
}

STATIC_ROOT 是当您 运行 命令 python manage.py collectstatic 时收集所有静态文件的地方 STATIC_URL 指向 STATIC_ROOT.

参考这里https://docs.djangoproject.com/en/3.0/ref/settings/#std:setting-STATIC_ROOT

更改 nginx 文件中的位置应该可以解决问题。

希望你的 nginx.conf 你声明:

    location /static {
            alias /home/zebra/intensecov_static;
    }

试试这个:

    location /static {
            alias /home/zebra/intensecov_static/;
    }

nginx 似乎需要尾随 / 才能使文件夹正常工作。 或者至少在删除尾随 / 时,静态文件的服务中断了。