Nginx 不为 Amazon EC2 中的 Django 提供静态文件 - 404 错误

Nginx not serving static files for Django in Amazon EC2 - 404 Error

我对 Django 开发和 Nginx 配置还很陌生。 使用 gunicorn 和 Nginx 在 Amazon EC2 中部署应用程序后,页面加载时没有静态文件(css、js 等)。

我怀疑是Nginx无法加载静态文件。我花了几个小时试图调整 Nginx 配置,并阅读了其他答案,但仍然没有运气。

如有任何正确方向的提示,我们将不胜感激。

/etc/nginx/sites-available/sbs

server{
        listen 80;
        server_name my_server_host;
        location = /favicon.ico { 
            access_log off; log_not_found off; 
        }

        location /static/ {
            autoindex on;
            root /home/ubuntu/secure-banking-system/sbs/static/;
        }
        location / {
            include proxy_params;
            proxy_pass http://unix:/home/ubuntu/secure-banking-system/sbs/sbs.sock;
        }
}

settings.py

STATIC_ROOT = '/home/ubuntu/secure-banking-system/sbs/static'

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'sbs/static')
]

我已经验证静态文件在 /home/ubuntu/secure-banking-system/sbs/static/

中可用

文件结构

secure-banking-system
|
|──sbs
   |
   |────│ 
        │   
        ├── sbs
        │   |
        │   └── static
        │       ├── css
        │       ├── images
        │       └── js
        |
        ├── static
            ├── css
            ├── images
            └── js

root 指令不会从请求中删除 /static 部分。所以请求

http://my_server_hos/static/foo/test.png

将使 nginx 在

中查找文件

/home/ubuntu/secure-banking-system/sbs/static/static/foo/test.png.


据了解,/static 位置的配置应为:

       location /static {
            autoindex on;
            root /home/ubuntu/secure-banking-system/sbs;
       }

另一种方法是使用 alias 指令:

       location /static {
            autoindex on;
            alias /home/ubuntu/secure-banking-system/sbs/static;
       }

这就是最终对我有用的方法。我还清除Python缓存文件和*.pyc因为我在settings.py没有反应。

/etc/nginx/sites-available/sbs

server{
        listen 80;
        server_name my_server_host;
location = /favicon.ico { access_log off; log_not_found off; }

    location /static/ {
        alias /home/ubuntu/secure-banking-system/sbs/static/;
    }
location / {
        include proxy_params;
        proxy_pass http://unix:/home/ubuntu/secure-banking-system/sbs/sbs.sock;
    }
}

settings.py

STATIC_ROOT = os.path.join(BASE_DIR, 'sbs/static/')
STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'sbs/static/')
]