这样子是为了便于切换和安装不同版本的php环境。
那么这种情况配置上需要怎么操作呢?
主要需要注意一点:nginx和php都需要访问文件系统中的php文件。但是本机文件系统和docker容器文件系统可能会有差异。
解决方案1:
通过将本地文件夹挂载到容器中,并保持文件路径完全一致。
这种情况 nginx 中只需要正常配置即可。
如本地网站根路径:/var/www/site1
在docker挂载时使用: -v /var/www/site1:/var/www/site1
在docker挂载时使用: -v /var/www/site1:/var/www/site1
解决方案2:
因为特殊原因就是无法保持文件路径完全一致。
这个时候 nginx 中就需要修改给 php-fpm 传递的参数 SCRIPT_FILENAME
如本地网站根路径:/var/www/site1
在docker挂载时使用: -v /var/www/site1:/web/mysite
在docker挂载时使用: -v /var/www/site1:/web/mysite
nginx中php-fpm的默认设置如下:
# pass the PHP scripts to FastCGI server
#
# See conf.d/php-fpm.conf for socket configuration
#
index index.php index.html index.htm;
location ~ \.(php|phar)(/.*)?$ {
fastcgi_split_path_info ^(.+\.(?:php|phar))(/.*)$;
fastcgi_intercept_errors on;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php-fpm;
}
#
# See conf.d/php-fpm.conf for socket configuration
#
index index.php index.html index.htm;
location ~ \.(php|phar)(/.*)?$ {
fastcgi_split_path_info ^(.+\.(?:php|phar))(/.*)$;
fastcgi_intercept_errors on;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php-fpm;
}
这里需要修改参数SCRIPT_FILENAME:
fastcgi_param SCRIPT_FILENAME /web/mysite$fastcgi_script_name;
这个方式有些麻烦,每个网站都需要单独进行配置。
如果网站多的话还是第一种方式简单一些。