Получение запрещенной ошибки при доступе к каталогу при использовании nginx внутри docker

Я использую Docker версии 4.14 для создания приложения Django и Nginx в качестве веб-службы. У меня есть два Dockerfiles, один для nginx и один для приложения Django. Рабочий процесс Django и обслуживание API прекрасно работают с nginx, и даже статические файлы хорошо обслуживаются через nginx. Я использую Django logging для записи исключений в приложении в каталог с именем logs, но когда я пытаюсь получить доступ к этому каталогу через nginx, я получаю ошибку 403 Forbidden.

**nginx docker file**

FROM nginx:1.21-alpine

RUN rm /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/conf.d
**nginx conf**

server {

    listen 80;
    include mime.types;
        types {
            text/plain log txt;
                
        }
    location / {
        proxy_pass http://web:8000;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
    }
    
    location /static/ {
        alias /code/static/;
    }
    
    location /logs {
        alias /code/logs/;
    }

}

\*\*root dockerfile
\*\*

FROM python:3.10.2-slim-bullseye

ENV PIP_DISABLE_PIP_VERSION_CHECK 1
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

WORKDIR /code

COPY ./requirements.txt .
RUN pip install -r requirements.txt

# Copy project

COPY . .

\*\*docker compose
\*\*

version: "3.9"
    services:
        web:
            build: .
            ports:
                \- "8000:8000"
            command: gunicorn tech_plotz.wsgi:application --bind 0.0.0.0:8000
            volumes:
                \- static_volume:/code/static
                \- logs_volume:/code/logs
            expose:
                \- 8000
            depends_on:
                \- db
        db:
            image: postgres:13
            volumes:
                \- postgres_data:/var/lib/postgresql/data/
            environment:
                \- "POSTGRES_HOST_AUTH_METHOD=trust"
            
        nginx:
            build: ./nginx
            ports:
                \- 1337:80
            volumes:
                \- static_volume:/code/static
                \- logs_volume:/code/logs
            depends_on:
                    \- web
volumes:
    postgres_data:
    static_volume:
    logs_volume:

как я могу получить доступ к каталогу журналов из nginx?

В общем Docker compose общие каталоги должны обслуживаться nginx.

Ошибка 403 Forbidden, которую вы получаете, может быть вызвана тем, что Nginx не имеет необходимых разрешений для доступа к каталогу журналов. Чтобы решить эту проблему, вы можете изменить блок расположения журналов в конфигурации Nginx, чтобы включить необходимые разрешения.

Например:

location /logs {
    alias /code/logs/;
    autoindex on;
    autoindex_exact_size off;
    autoindex_localtime on;
}

Это включит модуль Nginx autoindex и позволит ему отображать содержимое каталога журналов. Вам также может понадобиться изменить владельца и разрешения каталога logs, чтобы убедиться, что Nginx имеет необходимые разрешения для доступа к нему.

Вы можете изменить владельца и разрешения каталога журналов с помощью команд chown и chmod в Dockerfile для вашего приложения Django.

FROM python:3.10.2-slim-bullseye

ENV PIP_DISABLE_PIP_VERSION_CHECK 1
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

WORKDIR /code

COPY ./requirements.txt .
RUN pip install -r requirements.txt

# Copy project
COPY . .

# Modify owner and permissions of logs directory
RUN chown -R nginx:nginx /code/logs
RUN chmod 755 /code/logs

измените владельца каталога logs на пользователя и группу nginx и дайте каталогу права 755 (rwx для владельца, r-x для остальных). Вы можете изменить владельца и разрешения в соответствии с вашими требованиями.

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