Nginx не обслуживает статические файлы для Django в Amazon EC2 - ошибка 404 - PullRequest
0 голосов
/ 30 марта 2019

Я довольно новичок в разработке Django и настройке Nginx. После развертывания приложения в Amazon EC2 с использованием gunicorn и Nginx страница загружается без статических файлов (css, js и т. Д.).

Я подозреваю, что Nginx не может загрузить статические файлы. Я потратил пару часов, пытаясь настроить Nginx Config и читая другие ответы, но все равно не повезло.

Любые советы в правильном направлении приветствуются.

/ и т.д. / Nginx / сайты-доступные / СБС

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

Ответы [ 2 ]

1 голос
/ 01 апреля 2019

Это то, что, наконец, сработало для меня. Я также очистил кэш Python файлов и *. Pyc , поскольку мои изменения в settings.py не отражались.

/ и т.д. / Nginx / сайты-доступные / СБС

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/')
]
1 голос
/ 31 марта 2019

Директива 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;
       }
...