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



我对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/')
]

相关内容

  • 没有找到相关文章

最新更新