我正在做一个小实验,如果你愿意的话,一个假设。主要思想很简单:三个 Docker 容器,一个只是一个简单的数据容器,其中包含一个 index.php,它/app/web/
只是输出phpinfo();
这很好用。
我有一个运行良好的 nginx 容器和一个单独的 PHP-FPM 容器。两者都是来自官方图像。
我在标准设置下一切正常,甚至作为一项安全措施,将数据容器仅绑定到 php-fpm,因此 nginx 甚至无法访问文件本身。所以数据容器安装在 php-fpm 容器上/app
,一切顺利。
这一切都很好。然后我开始玩一些变量。
我突然想到,实际上,如果 nginx 只是将变量传递给 php-fpm,那么我可能会删除 nginx fastcgi 设置中的一些参数,因为如果它甚至不知道发生了什么,它为什么需要它们? ?
chroot
set to一切顺利/app
,我添加了chdir
to /web
,但是一旦我PATH_TRANSLATED
从 nginx 中删除,它就无法工作。我要么得到File not found.
要么No input file specified.
这里是 nginx 容器的 nginx.conf 的相关部分,在 nginx.conf 中没有root
指定:
location / {
index index.php;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
fastcgi_index index.php;
fastcgi_param HTTPS $https;
fastcgi_param HTTP_PROXY '';
fastcgi_intercept_errors on;
fastcgi_pass php-fpm:9000;
break;
}
www.conf
和池的相关部分:
chroot = /app
; Chdir to this directory at the start.
; Note: relative path can be used.
; Default Value: current directory or / when chroot
chdir = /web
php_admin_value[doc_root] = /app/web
有任何想法吗?