В Nginx ничего не написано access.log / error.log - как устранить неполадки? - PullRequest
0 голосов
/ 03 мая 2019

У меня есть проект Django, развернутый с Docker на DigitalOcean.Я основал его на этом уроке , но мне пришлось изменить некоторые вещи, чтобы он заработал.Я получаю ошибку 500, когда пытаюсь зарегистрироваться по электронной почте SMTP (работает локально), и проблема в том, что я не могу получить больше информации об этой ошибке, потому что ничего не записывается в nginx access.log / error.log (файлы всегда пустые), и я не могу найти никаких выводов в журналах докеров.

Я был во всем переполнении стека и в Интернете в целом, но не нашел помощи.Я попытался изменить права доступа / владельца для файлов журнала, чтобы они соответствовали рабочему Nginx, без разницы.Я попытался переопределить файлы журналов по умолчанию (/var/log/nginx/error.log) в конфигурации Nginx, хотя кажется, что мне это не нужно, и это тоже не имело никакого значения.

Вот что у меня есть в nginx / sites-enabled:

server {

    listen 80;
    server_name 134.209.172.141;
    charset utf-8;

    location /static {
        alias /www/static;
    }

    location / {
        proxy_pass http://web:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

}

... и Dockerfile nginx:

FROM tutum/nginx

RUN rm /etc/nginx/sites-enabled/default

COPY sites-enabled/ /etc/nginx/sites-enabled

Я не указываю nginxФайл .conf, но я замечаю, что если я зашита в контейнер nginx, такой файл будет в /etc/nginx/nginx.conf.Возможно, это происходит по умолчанию с образом Docker?

Вот docker-compose.yml, который я использую для сборки:

version: '3'

services:
  web:
    restart: always
    build: ./web
    expose:
      - "8000"
    links:
      - postgres:postgres
      - redis:redis
    volumes:
      - web-django:/usr/src/app
      - web-static:/usr/src/app/static
    env_file: .env_prod
    command: /usr/local/bin/gunicorn cpm_project.wsgi:application -w 2 -b :8000

  nginx:
    restart: always
    build: ./nginx/
    ports:
      - "80:80"
    volumes:
      - web-static:/www/static
    links:
      - web:web

  postgres:
    restart: always
    image: postgres:latest
    volumes:
      - pgdata:/var/lib/postgresql/data/

  redis:
    restart: always
    image: redis:latest
    ports:
      - "6379:6379"
    volumes:
      - redisdata:/data

volumes:
  web-django:
  web-static:
  pgdata:
  redisdata:

После бесчисленных часов работы у меня было что-то, что работает, вНесмотря на большие пробелы в моем понимании docker / nginx.Но когда я добавил SMTP в Django settings.py и попытался проверить регистрацию электронной почты в реальном времени, я получил ошибку 500 после нажатия кнопки «зарегистрироваться»;и затем, после многих часов исследований и проб разных вещей, а также отрывания волос, у меня нет больше информации об этой ошибке, и ничто не похоже на проблеск подсказки к реальной проблеме, не говоря уже о решении.Кажется, что начать работу с журналами Nginx - это хорошее начало, но я был бы признателен за любую ясность.

Рад опубликовать любой другой код, который может быть полезен, не хотел вас затоплять.

1 Ответ

0 голосов
/ 04 мая 2019

Понял.В случае, если у кого-то еще есть подобные проблемы, обходной путь, который наконец-то меня нашел, заключался в определении нового файла журнала ошибок в моих сайтах с включением, добавив эту строку:

error_log /var/log/nginx/new_error.log debug;

AtПримерно в то же время я понял, что могу просто временно установить DEBUG = True в настройках Django и получить подробные сообщения об ошибках прямо в браузере.Это кажется совершенно очевидным в ретроспективе, но мне это почему-то не пришло в голову.

Основной проблемой с ошибкой 500 оказались настройки безопасности на SMTP-сервере, никак не связанные с моим кодом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...