使用 systemd 来设置 Apache 环境变量或 SetEnv?

使用 systemd 来设置 Apache 环境变量或 SetEnv?

我的系统:

  1. CentOS 7.2.1511(核心)
  2. Apache 2.4.6

我有相当多的环境变量想要添加到 Apache。

/etc/httpd/conf.d/vhosts.conf我目前正在通过如下方式添加到我的文件中:

SetEnv API_USERNAME 'my_special_username'
SetEnv API_PASSWORD 'my_special_password'

我可以通过以下方式访问 PHP 中的两个环境变量:

echo $_SERVER['API_USERNAME'];
echo $_SERVER['API_PASSWORD'];
// or
echo getenv('API_USERNAME');
echo getenv('API_PASSWORD');

最近,我发现我也可以通过以下方式添加环境变量systemd

我创建文件/etc/systemd/system/httpd.service.d/envvars.conf

[Service]
Environment="API_USERNAME=my_special_username"
Environment="API_PASSWORD=my_special_password"

其次是

systemctl daemon-reload

systemctl restart httpd

我可以通过以下方式访问 PHP 中的两个环境变量:

echo getenv('API_USERNAME');
echo getenv('API_PASSWORD');
// $_SERVER does not work when I specify environment variables in systemd
echo $_SERVER['API_USERNAME']; // returns blank
echo $_SERVER['API_PASSWORD']; // returns blank

问题

从安全性或最佳实践的角度来看,最好将我的 Apache 环境变量添加到配置文件使用 SetEnv 或systemd? 还是无所谓?

答案1

我同意 Tvon 的说法,并想更具体地补充一点,systemd 确实不是放置这些 Apache 环境变量的正确地方。使用 Systemd 的其他应用程序或进程无需了解这些变量。

我还会考虑你是否要在同一台服务器上托管多个 PHP 网站,如果是的话,而不是把所有东西都放在

/etc/httpd/conf.d/vhosts.conf

我也会考虑使用站点可用方法,又称“debian-way”

如何配置 Apache(sites-available 与 httpd.conf)

以下方法基于 Centos 指南https://www.digitalocean.com/community/tutorials/how-to-set-up-apache-virtual-hosts-on-centos-7#step-four-%E2%80%94-create-new-virtual-host-files

sudo mkdir /etc/httpd/sites-available
sudo mkdir /etc/httpd/sites-enabled

告诉 Apache 在 sites-enabled 目录中查找虚拟主机。通过编辑 Apache 的主配置文件并添加一行来声明用于其他配置文件的可选目录:

sudo nano /etc/httpd/conf/httpd.conf

在文件末尾添加一行 IncludeOptional sites-enabled/*.conf

保存并关闭文件。然后创建一个虚拟主机文件。

sudo nano /etc/httpd/sites-available/example.com.conf

<VirtualHost *:80>

</VirtualHost>

然后添加你的第一个网站的目录

<VirtualHost *:80>
    ServerName www.example.com
    ServerAlias example.com

    SetEnv API_USERNAME 'my_special_username'
    SetEnv API_PASSWORD 'my_special_password'

    DocumentRoot /var/www/example.com/public_html
    ErrorLog /var/www/example.com/error.log
    CustomLog /var/www/example.com/requests.log combined

</VirtualHost>

保存并关闭文件。然后为您的第二个网站创建一个名为 example2.com.conf 的副本

sudo cp /etc/httpd/sites-available/example.com.conf /etc/httpd/sites-available/example2.com.conf

编辑文件并进行相关更改

sudo nano /etc/httpd/sites-available/example2.com.conf

<VirtualHost *:80>
    ServerName www.example2.com
    ServerAlias example2.com

    SetEnv API_USERNAME 'my_other_special_username'
    SetEnv API_PASSWORD 'my_other_special_password'

    DocumentRoot /var/www/example2.com/public_html
    ErrorLog /var/www/example2.com/error.log
    CustomLog /var/www/example2.com/requests.log combined

</VirtualHost>

然后,您需要通过创建从 sites-enabled 目录到 sites-available 目录的符号链接来启用这些站点

sudo ln -s /etc/httpd/sites-available/example.com.conf /etc/httpd/sites-enabled/example.com.conf
sudo ln -s /etc/httpd/sites-available/example2.com.conf /etc/httpd/sites-enabled/example2.com.conf

然后重新启动 apache(通常我先做一个配置测试来查看是否有错误)

sudo apachectl configtest

如果一切顺利的话

sudo apachectl restart

此方法的其他好处是,您可以创建现有配置的新版本,并使用符号链接来回指向新配置出现的任何问题,或在必要时启用/禁用网站。

相关内容