我目前正在尝试了解Caddy和FastCGI的功能。我有一个与 NGINX 完美配合的设置,我想切换到 Caddy 以使用内置的 SSL 功能。我在我的 Docker Compose 配置中设置了 2 个服务:
首先,以下是我的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 容器中访问源代码。
遇到同样的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 中。