Laravel中特定环境的SSL配置在.env文件中

5

我正在运行Laravel 5.1,并且有多个环境,其中一些需要SSL,而另一些则不需要。当我需要SSL时,我的database.php配置需要mysql驱动程序中的以下内容:

'options'   => [
    PDO::MYSQL_ATTR_SSL_KEY     => env('MYSQL_SSL_KEY'), // /path/to/key.pem
    PDO::MYSQL_ATTR_SSL_CERT    => env('MYSQL_SSL_CERT'), // /path/to/cert.pem
    PDO::MYSQL_ATTR_SSL_CA      => env('MYSQL_SSL_CA'), // /path/to/ca.pem
    PDO::MYSQL_ATTR_SSL_CIPHER  => env('MYSQL_SSL_CIPHER')
]

问题在于,当我在不使用SSL的环境(例如本地)中将这些env()变量设置为null时,它会出现问题(白屏等)。我必须要么不设置“options”键,要么将其设置为空数组才能使其正常工作,这样就会删除env()变量,然后在SSL环境中就不能正常工作了。
有没有一种方法可以满足这个键,同时适用于SSL和非SSL环境?
1个回答

9
您可以定义一个新的环境变量来启用或禁用SSL使用,然后使用三元运算符加载适当的配置。
在需要启用数据库SSL的环境中将以下内容添加到您的.env文件中:
MYSQL_SSL=true // not having this variable defined or being false, will disable SSL

在您的config/database.php文件中,修改连接的options键值为以下内容:
'options' => (env('MYSQL_SSL')) ? [
    PDO::MYSQL_ATTR_SSL_KEY    => env('MYSQL_SSL_KEY'),  // /path/to/key.pem
    PDO::MYSQL_ATTR_SSL_CERT   => env('MYSQL_SSL_CERT'), // /path/to/cert.pem
    PDO::MYSQL_ATTR_SSL_CA     => env('MYSQL_SSL_CA'),   // /path/to/ca.pem
    PDO::MYSQL_ATTR_SSL_CIPHER => env('MYSQL_SSL_CIPHER')
] : []

通常我不赞成在配置文件中使用逻辑,但这是一个可以例外的情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接