Назад | Перейти на главную страницу

Используете 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/systemd/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? Или это не важно?

Я согласен с тем, что говорит Твон, и хотел бы более конкретно добавить, что systemd - действительно неправильное место для размещения этих переменных среды Apache. Другим приложениям или процессам, использующим Systemd, не нужно знать об этих переменных.

Я бы также подумал, будете ли вы размещать несколько сайтов PHP на одном сервере, и если да, вместо того, чтобы вставлять все в

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

Я бы также подумал об использовании метода, доступного для сайта, также известного как «debian-way».

Как настроить Apache (сайты доступны или 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-файлы

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

Скажите Apache, что нужно искать виртуальные хосты в каталоге сайтов. отредактировав основной файл конфигурации 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>

Затем вам нужно будет включить сайты, создав символическую ссылку из каталога с поддержкой сайтов в каталог с доступными сайтами.

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

Другим преимуществом этого метода является то, что вы можете создавать новые версии существующих конфигураций и использовать символические ссылки, чтобы указывать туда и обратно, если возникнут какие-либо проблемы с новой конфигурацией, или включать / отключать веб-сайты при необходимости.