Получение запрещенной ошибки при доступе к каталогу при использовании 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 для остальных). Вы можете изменить владельца и разрешения в соответствии с вашими требованиями.