DJango + nginx + gunicorn: как начать кэширование и какой способ более стандартный?
Я развернул свой проект Django с помощью Gunicorn, но теперь не могу использовать кэширование Nginx.
Как запустить кэширование в проекте, использующем Gunicorn, и какой метод кэширования является стандартным для Django.
Я пытаюсь использовать кэширование Ngnix, но оно не работает.
Вот пример моего Ngnix conf и Caching Conf
Ngnix Conf
/etc/nginx/sites-available/my-project-config
upstream daphne_server {
server unix:/var/www/my-project-config/env/run/daphne.sock fail_timeout=0;
}
upstream gunicorn_server {
server unix:/var/www/my-project-config/env/run/gunicorn.sock fail_timeout=0;
}
server {
listen 8000;
server_name my_server_ip_address or domain name;
client_max_body_size 100M;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/ubuntu/my_project_dir/public_html;
}
location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn.sock;
}
location /ws/ {
proxy_pass http://localhost:8001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
}
}
Cache Config
/etc/nginx/sites-available/my-project-cache-config
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=custom_cache:10m inactive=60m;
upstream origin_server {
server 127.0.0.1:8000;
}
server {
listen 80;
server_name _;
location / {
include proxy_params;
proxy_pass http://origin_server;
proxy_cache custom_cache;
proxy_cache_valid any 10m;
add_header X-Proxy-Cache $upstream_cache_status;
}
}
Гнездо Единорога
/etc/systemd/system/gunicorn.socket
[Unit]
Description=gunicorn socket
[Socket]
ListenStream=/run/gunicorn.sock
[Install]
WantedBy=sockets.target
Гуникорн Сервис
sudo nano /etc/systemd/system/gunicorn.service
[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target
[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/my_project_dir
ExecStart=/home/ubuntu/my_project_dir/venv/bin/gunicorn \
--access-logfile - \
--workers 3 \
--bind unix:/run/gunicorn.sock \
my_project.wsgi:application
[Install]
WantedBy=multi-user.target
Я также использую gunicorn для размещения веб-сервера django на Nginx, и я не сталкивался с этой проблемой. Я считаю, что не имеет значения, что вы хоститесь на gunicorn. Если вы настроите кэширование для директории, содержащей все ваши статические файлы, все должно работать.
Вот пример, где статические файлы кэшируются в течение года:
location /static {
root [location of /static folder];
expires 1y;
access_log off;
add_header Cache-Control "public";
}
Если это не решит проблему, пожалуйста, добавьте настройки кэша для Nginx к вашему вопросу
Если вы пытаетесь кэшировать представления или шаблоны django, обратите внимание на django-cahceops или аналогичный пакет