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

relj7zay  于 2023-05-12  发布在  PHP
关注(0)|答案(1)|浏览(217)

我目前正在尝试了解球童和FastCGI的功能。我有一个在NGINX上运行得很好的设置,我想切换到Caddy来使用内置的SSL功能。我在Docker Compose配置中设置了2个服务:

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

首先,下面是我的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未找到”。
因此,我希望有人能帮助我理解FastCGI和Caddy,并告诉我需要在配置中进行哪些更改,以便不需要从Caddy容器中访问源代码。

wbgh16ku

wbgh16ku1#

遇到同样的404问题,在阅读了这篇文章后,在dockers之间共享代码源可以解决这个问题,我意识到这是因为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中。

相关问题