【问题标题】:Nothing is written to Nginx access.log/error.log - how to troubleshoot?没有任何内容写入 Nginx access.log/error.log - 如何进行故障排除?
【发布时间】:2019-05-03 18:25:49
【问题描述】:

我在 DigitalOcean 上使用 Docker 部署了一个 Django 项目。我以this tutorial 为基础,但必须更改一些内容才能使其正常工作。当我尝试实时 SMTP 电子邮件注册时出现 500 错误(在本地工作正常),最近的问题是我无法获得有关此错误的更多信息,因为没有任何内容被写入 nginx access.log/error .log (文件总是空的)并且我能找到的任何 docker 日志都没有输出。

我已经遍及 Stack Overflow 和整个 Internet,但没有找到任何帮助。我尝试更改日志文件的权限/所有者以匹配 Nginx 工作人员,没有任何区别。我尝试在 Nginx 配置中重新指定默认日志文件(/var/log/nginx/error.log),即使看起来我不应该这样做,这也没有什么区别。

这是我在 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;
    }

}

...和 ​​nginx Dockerfile:

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 日志工作是一个很好的起点,但我会很感激任何清晰的。

很高兴发布任何其他可能有用的代码,不想淹没你。

【问题讨论】:

  • 要将 nginx 日志放在容器之外,您需要将日志卷绑定到 nginx 容器。
  • 我希望日志在 nginx 容器内。我正在努力阅读它们。
  • 你是怎么做到的?请在问题中添加完整的命令行。
  • 要进入容器,我运行docker-compose exec nginx bash。当您询问完整的命令行时,您的意思是您想查看我为设置容器而运行的所有命令,还是任何特别的东西?
  • 我建议您从已弃用的图像切换到官方图像,明确指定访问和错误日​​志记录选项,检查或明确定义对日志记录目标文件夹的适当权限,然后重试。另外,恕我直言,将 1) conf 2) 日志 3) 静态文件保存在容器中并不是一个好主意。另外,请注意,删除和复制为您提供了两个层,而您可以只复制。

标签: django docker nginx


【解决方案1】:

想通了。如果其他人遇到类似问题,最终让我找到某个地方的解决方法是在我的启用站点中定义一个新的错误日志文件,添加以下行:

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

大约在同一时间,我意识到我可以在 Django 设置中临时设置 DEBUG=True 并直接在浏览器中获取详细的错误消息。回想起来,这似乎很明显,但出于某种原因,我没有想到。

500 错误的最终问题是 smtp 服务器上的安全设置,与我的代码无关。

【讨论】:

    猜你喜欢
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2019-12-24
    • 2014-12-14
    相关资源
    最近更新 更多