【问题标题】:Environment specific SSL config in Laravel .env fileLaravel .env 文件中特定于环境的 SSL 配置
【发布时间】:2016-02-17 21:58:12
【问题描述】:

我正在运行 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 时,它会中断(白屏等)。我必须要么不设置“选项”键,要么设置为一个空数组以使其工作,这将删除 env() 变量,然后这些变量将无法在 SSL 环境中工作。

有没有一种方法可以满足这个适用于 SSL 和非 SSL 环境的密钥?

【问题讨论】:

    标签: php mysql laravel ssl laravel-5.1


    【解决方案1】:

    您可以定义一个启用或禁用 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')
    ] : []
    

    我通常反对在配置文件中使用逻辑,但这种情况可能会导致异常。

    【讨论】:

      猜你喜欢
      • 2018-01-20
      • 2021-10-14
      • 2015-03-18
      • 1970-01-01
      • 2019-05-22
      • 1970-01-01
      • 1970-01-01
      • 2011-07-11
      • 1970-01-01
      相关资源
      最近更新 更多