Остается только привести дефолтный конфиг
nginx для
Django:
server {
listen 80;
server_name domain.ltd;
root /srv/app/public;
# Logs.
access_log /var/log/nginx/domain.ltd_access.log;
error_log /var/log/nginx/domain.ltd_error.log;
# Options.
client_max_body_size 0;
keepalive_timeout 5;
# Locations.
location / {
try_files $uri @proxy_to_app;
}
location @proxy_to_app {
proxy_pass http://127.0.0.1:8001; # See guniconf.py file.
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
}
}
В таком случае, удобно будет организовать проект следующим образом:
/srv/app/
├── example
│ ├── forms.py
│ ├── __init__.py
│ ├── migrations
│ ├── models.py
│ ├── settings.py
│ ├── static
│ ├── templates
│ ├── urls.py
│ ├── views.py
│ └── wsgi.py
├── logs
├── manage.py
├── public
│ └── static
├── README.md
├── requirements.txt
└── venv
Для работы этой схемы проекта нужно добавить в
settings.py:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'public', 'static')
При такой конфигурации веб сервер смотрит в каталог
/srv/app/public/ и попытается сперва отдать с диска то, что запросил пользователь, если не найдет, то отправит запрос в Django.
А еще появляется возможность складывать свои собственные статические файлы в этот каталог (например zip архив или pdf документ), кроме того, нет необходимости что-то менять в конфигурации nginx, что очень удобно.
Для media можно поступить аналогично, если для скачивания media не предусмотрена авторизация, для этого нужно добавить в
settings.py:
STATIC_URL = '/media/'
STATIC_ROOT = os.path.join(BASE_DIR, 'public', 'media')
/srv/app/
├── example
├── logs
├── public
│ ├── media
│ └── static
└── manage.py
Если все-таки авторизация нужна, то не стоит складывать каталог media в public, в таком случае лучше придерживаться стандартной конфигурации:
STATIC_URL = '/media/'
STATIC_ROOT = os.path.join(BASE_DIR, 'media')
/srv/app/
├── example
├── logs
├── media
├── public
│ └── static
└── manage.py
Еще порекомендовал бы настроить
X-Accel-Redirect для отдачи
media через nginx, но об этом я в этом посте уже не буду писать.