将 PHP 应用程序和 Caddy 与两个不同的 Docker 容器和 FastCGI 结合

问题描述 投票:0回答:1

我目前正在尝试了解Caddy和FastCGI的功能。我有一个与 NGINX 完美配合的设置,我想切换到 Caddy 以使用内置的 SSL 功能。我在我的 Docker Compose 配置中设置了 2 个服务:

  • 包含我的 PHP Symfony 应用程序的 PHP 服务(基于 php:8.2-fpm-alpine)
  • 应该将请求传递到我的 PHP 容器的 Caddy 服务

首先,以下是我的NGINX配置文件:

server {
    listen 80;
    index index.php index.html;

    root /srv/app/public;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_hide_header X-Powered-By;
    }
}

通过此设置,NGINX 服务器将请求传递到我名为“php”的 PHP 服务而无需将我的源代码安装或复制到 NGINX 映像中。我不得不承认,我不太明白为什么我需要“root”指令,而它只是我 NGINX 容器中的一个空文件夹。

现在有了Caddy,我切换到如下配置:

localhost {
    root * /srv/app/public
    php_fastcgi ${PHP_SERVICE_NAME}:9000
    file_server
}

这个 Caddy 配置也能正常工作,但只有在将我的源代码安装到服务器容器中时才有效。移除绑定安装后,我得到的只是“404 Not Found”。

所以我希望有人能帮助我理解 FastCGI 和 Caddy,并告诉我我需要在我的配置中更改什么,以便不需要从 Caddy 容器中访问源代码。

php docker fastcgi caddy caddyfile
1个回答
0
投票

遇到同样的404问题,看了这篇在docker之间共享代码源可以解决这个问题的帖子后,我意识到这是因为php在php docker中运行,并且它可以识别的php文件位置也是docker中的路径。当 caddy 将 php 文件重定向到 php 进程时,文件位置是 docker php 无法识别的主机路径,从而引发“404 not found”。

解决方案是让caddy负责php的位置

        php_fastcgi  127.0.0.1:9000 {
          root /var/www/html
        }

注意:在我的案例中,wordpress + caddy 在单独的 docker 中。

© www.soinside.com 2019 - 2024. All rights reserved.