由于 symfony4 使用 dotenv 和环境变量进行配置,因此服务器上也需要它们。
为了传递变量,可以将以下内容添加到池配置中:
example-pool.conf
:
env[APP_ENV] = 'prod'
问题是以下特征:
所有 $VARIABLE 都取自当前“环境
由于几乎每个加密/散列密码字符串都包含$
,我遇到一个问题,即包含的环境变量$
是空的。
php bin/console security:encode-password
...snip...
------------------ ---------------------------------------------------------------
Key Value
------------------ ---------------------------------------------------------------
Encoder used Symfony\Component\Security\Core\Encoder\BCryptPasswordEncoder
Encoded password $2y$12$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg.
------------------ ---------------------------------------------------------------
...snip...
当然我可以使用 nginx 将我的环境变量传递给 php-fpm
nginx-vhost.conf
:
fastcgi_param APP_ENV "prod";
但在这种情况下,我必须重构我的 Puppet 配方,所以我正在寻找在 php-fpm 中设置它的替代方法
我尝试使用单引号、双引号并转义$
example-pool.conf
:
...snip...
env[PASSWORD1] = $2y$12$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg.
env[PASSWORD2] = "$2y$12$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg."
env[PASSWORD3] = '$2y$12$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg.'
env[PASSWORD4] = "'$2y$12$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg.'"
env[PASSWORD5] = '"$2y$12$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg."'
env[PASSWORD6] = "\$2y\$12\$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg."
env[PASSWORD7] = '\$2y\$12\$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg.'
env[PASSWORD8] = \$2y\$12\$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg.
env[PASSWORD9] = $$2y$$12$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg.
env[PASSWORD10] = '$$2y$$12$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg.'
...snip...
在 php 中产生以下输出,test.php
其中包含一个简单的:
输出:
"PASSWORD10" => ""
"PASSWORD9" => ""
"PASSWORD8" => "\$2y\$12\$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg."
"PASSWORD7" => "\$2y\$12\$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg."
"PASSWORD6" => ""
"PASSWORD5" => ""$2y$12$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg.""
"PASSWORD4" => "'$2y$12$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg.'"
"PASSWORD3" => ""
"PASSWORD2" => ""
"PASSWORD1" => ""
将其标记为与安全相关,因为它导致使用弱(字母数字)纯文本密码。
相关但不相同
附带问题,由于 php-fpm 进程是作为用户定义的启动的user
,因此会加载哪些环境文件?经过测试.bashrc
,.profile
由于这些是 php-cli 读取环境变量的位置,我很乐意只在一个地方声明它们并从 cli 和 fpm 中使用它们。这个问题已经间接地在这里问过了将环境变量传递给 PHP CLI 和 FPM
考虑在 php 上创建一个错误报告,因为解决这个问题的方法是直接使用 dotenv 文件: