我的系统:
- CentOS 7.2.1511(核心)
- 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)
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
此方法的其他好处是,您可以创建现有配置的新版本,并使用符号链接来回指向新配置出现的任何问题,或在必要时启用/禁用网站。