我目前正在尝试了解球童和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容器中访问源代码。
1条答案
按热度按时间wbgh16ku1#
遇到同样的404问题,在阅读了这篇文章后,在dockers之间共享代码源可以解决这个问题,我意识到这是因为php在php docker中运行,它可以识别的php文件位置也是docker中的路径。当caddy将php文件重定向到php进程时,文件位置是无法被docker php识别的主机路径,从而引发“404 not found”。
解决办法是让Caddy负责PHP的位置
注意:在我的情况下,WordPress + Caddy在单独的Docker中。