Отказано в разрешении /media файлов Настройка Django Nginx

Я следовал этому руководству:

https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-22-04

Все работает (статические файлы обслуживаются и т.д.), но загруженные пользователем медиа файлы показывают "разрешение отклонено" при попытке доступа к изображению:

2023/01/21 09:50:01 [error] 12912#12912: *266 open() "/home/hvn/intranet/intranet/media/images/werkstujk_1_Far44Li.2e16d0ba.fill-322x247-c100.jpg" failed (13: Permission denied), client: xxx.xxx.xxx.xxx, server: xxxxx.net, request: "GET /media/images/werkstujk_1_Far44Li.2e16d0ba.fill-322x247-c100.jpg HTTP/1.1", host: "www.xxxxxx.net", referrer: "https://www.xxxxx.net/blogs/"

Я использую wagtail в качестве cms системы.

Сокет Gunicorn запущен под пользователем 'hvn' и группой 'www-data'.

Разрешения на каталоги и файлы выглядят следующим образом:

750 для каталогов и 644 для файлов:

ll | grep media
drwxr-xr-x  5 hvn www-data 4096 Jan 17 22:36 media/

-rw-r--r-- 1 hvn www-data  33857 Jan 21 00:24 werkstujk_1_Far44Li.2e16d0ba.fill-322x247-c100.jpg

Мой файл конфигурации nginx обслуживает папку media:

location /media/ {
        root /home/hvn/intranet/intranet;
    }
/etc/nginx/sites-enabled/xxx.xx                                               
server {
    server_name xxx.xx *.xxx.xx;

location = /favicon.ico { access_log off; log_not_found off; }
    location /collectstatic/ {
        root /home/hvn/intranet/intranet;
    }

location /media/ {
        root /home/hvn/intranet/intranet;
    }

location / {
        include proxy_params;
        proxy_pass http://unix:/run/gunicorn.sock;
    }



    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/xxx.xx/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/xxx.xx/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot


}
server {
    if ($host = www.xxxx.xx) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    if ($host = xxx.xx) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen 80;
    server_name xxx.net *.xxx.xx;
    return 404; # managed by Certbot

Что я делаю неправильно? Пожалуйста, помогите мне. Спасибо заранее.

Решено: Пришлось установить в nginx.conf, что nginx запускается под тем же пользователем, который обслуживает сайт:

Проверьте пользователя в файле /etc/nginx/nginx.conf Измените право собственности на пользователя. sudo chown -R nginx:nginx /var/lib/nginx

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