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 или аналогичный пакет

Вернуться на верх