如何使用 Apache 服务器管理 Ubuntu 上应用程序的多个环境?

如何使用 Apache 服务器管理 Ubuntu 上应用程序的多个环境?

我有一个 PHP 应用程序,我想在 Linode 上的一个实例中托管暂存、演示和生产服务器。我遇到的挑战是为每个服务器加载不同的环境变量。

我在 /etc/apache2/sites-available/ 中创建了多个 .conf 文件,如下所示:

<VirtualHost *:80>
     ServerAdmin [email protected]
     ServerName stag.example.com
     ServerAlias stag.example.com
     DocumentRoot /var/www/example-app/public
     ErrorLog /var/www/example-app/writable/logs/errors.stag.log
     CustomLog /var/www/example-app/writable/logs/access.stag.log combined
     RewriteEngine on
     RewriteCond %{SERVER_NAME} =stag.example.com
     RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

我已尝试为 /etc/profile.d/ 目录中的每个服务器创建包含所有环境变量的 .sh 文件,如下所示:

export ENV1="abc"
export ENV2="def"

但我不知道如何在 .conf 文件中加载该文件。我还尝试在 .conf 中明确设置 APP_ENV 变量(即SetEnv APP_ENV staging)。然后我会检查 PHP 代码中的 APP_ENV 变量(即getenv("APP_ENV")),并在此基础上,我可以读取正确的 .sh 文件并将该文件中的环境变量加载到 $_ENV 中。但是,由于某种原因,当我检索 PHP 代码中的所有环境变量时,APP_ENV 变量并未显示(即print_r getenv())。当我这样做时,只会列出 /etc/apache2/envvars 中设置的变量。

我是 Ubuntu 和 Linode 的新手(以前,我只使用托管服务器),所以我可能遗漏了一些简单的东西,所以如果您能提供任何帮助,我将非常感激。

答案1

PHP 环境变量与您的系统变量或 Apache 环境变量不同。

如果您想设置一个可以使用从您的 PHP 代码中检索的 APP_ENV 环境变量getenv("APP_ENV"),您应该考虑在您的php.ini文件中声明它。(这里有更好的解释:https://w3schools.in/php/environment-variables

  1. 转到/etc/php/XX/apache2/php.ini(其中 XX 取决于您的 PHP 版本)
  2. 添加变量(例如APP_ENV = "PROD":)
  3. 从你的 PHP 代码中读取它getenv("APP_ENV"

这有帮助吗? 谨致问候。

相关内容