如何从容器中的 php_fastcgi 中获取调试日志?

如何从容器中的 php_fastcgi 中获取调试日志?

我正在运行一个由...构建的容器这个Dockerfile。它正在运行一个基本的 PHP 应用程序。在它前面我有球童。很多人把 nginx 放在 PHP 前面。我不会,也不会。所以如果你的建议是“使用 nginx”或“使用 apache”,请不要回复。

笔记:写好问题的过程让我发现了我的问题。原来这是 Caddy 的问题。我需要root /app在指令中指定php_fastcgi,如 Caddy 文档中所示。我不再收到我收到的 404。但是,我仍然不知道如何在容器中更好地调试 FastCGI,所以我将问题留待解决,因为这对我来说仍然很有趣。(我不明白该root参数在 FastCGI 连接中是如何使用的)

以下是相关内容Caddy 指令在我的Caddyfile

new.example.com {
    root * /nfs/www/example/html
    php_fastcgi example-container:9000 {
        root /app
    }
    file_server
}

我创建了一个名为的文件,test.html其中包含一些非常基本的内容:

<html>
<head><title>paco test</title></head>
<body>
<p>This is a test</p>
</body>
</html>

如果我将此文件放入/nfs/www/example/html/test.html,然后访问,https://new.example.com/test.html我会得到完全符合预期的网页。如果我将文件复制到test.php,这将调用 PHP 引擎,我会收到错误 404。在 PHP 容器的日志中,我只看到:

172.21.0.5 -  23/Mar/2024:16:30:41 -0400 "GET /test.php" 404

PHP docker 容器看不到请求,test.html因为 Caddy 直接提供该请求。分享这一点的目的是为了表明 Caddy 正在做正确的事情,并且 PHP 容器正在接收它应该接收的请求。这就是为什么我的问题是 PHP/FastCGI 问题,而不是 Caddy/nginx/apache 问题。

现在,如果有人能解决我的问题,那就太好了(即如何让 FastCGI PHP 真正找到正确的 PHP 文件并执行它),但我实际上只是想问如何在 FastCGI 容器中打开更详细的日志记录。我无法弄清楚它在找不到时试图打开哪个文件路径test.php。我无法/test.php 404在日志中获得比该行更详细的信息。我无法在容器本身内找到任何其他日志。

据我所知,这个 docker 容器打算php-fpm在 的当前工作目录中运行/app。如果我使用docker exec在容器中获取 shell,我会看到 中的所有文件/app(例如),并且所有文件权限都正常。这是我的文件/app/test.php块:docker-compose.yaml

  example:
    image: oberonamsterdam/php:8.2-fpm
    container_name: example
    user: "1006:1006"
    restart: always
    volumes:
      - /nfs/www/example/html:/app/:cached
    environment:
      - "PHP_SESSION_SAVE_HANDLER=redis"
      - "PHP_SESSION_SAVE_PATH=tcp://redis:6379"
      - TZ=EST5EDT
    links:
      - redis
    depends_on:
      - redis
    networks:
      - caddy

我进行了一些搜索,并在 PHP 容器中启用了一些选项。在我的php-fpm.d配置文件中,我有一些类似这样的指令:

catch_workers_output = yes
decorate_workers_output = yes
php_flag[display_errors] = on
php_admin_flag[log_errors] = on

我已经能够使用它在容器中docker exec运行,并且可以运行并获得预期的输出。所以这显然是某种 FastCGI 的东西。bashphp test.php

关于如何从该容器中获得更多 FastCGI / PHP 调试的任何想法?

相关内容