Установка Apache в CentOS

Blog

Веб-сервер Apache является наиболее распространенной платформой для развертывания сервисов, работающих по протоколу HTTP. Популярность объяснима – программное обеспечение включает динамически подгружаемые модули, поддержку множества форматов файлов, взаимодействие с другим профильным софтом.

Установка Apache В Cent Os

Необходимые условия

Работа с HTTP-сервером Apache требует предварительно настроенной операционной системы, в этой статье за основу возьмем CentOS 8, но инструкция подойдет и для других версий. Будет достаточно создать пользователя с привилегиями sudo и разрешить соединение во встроенном брандмауэре. Разворачивать систему можно на локальном ПК или виртуальной машине, арендованной у провайдера cloud.timeweb.com.

Шаг 1. Инсталляция Apache

Пакет с инструментом Apache есть в официальном репозитории CentOS, поэтому он доступен для установки при помощи dnf. Выполним команду:

sudo dnf install httpd

После подтверждения диспетчер пакетов выполняет установку веб-сервера Apache в CentOS и всех необходимых для его функционирования зависимостей. Важно, чтобы фаервол уже был настроен для ответа на запросы по протоколу HTTP. Например, понадобится открытый порт 443 вместе со включенной службой http.

sudo firewall-cmd --permanent --add-service=https

После применения команды обязательна перезагрузка брандмауэра, иначе новые правила не начнут действовать:

sudo firewall-cmd –reload

Установка Apache завершена, пора запускать его и проверять работоспособность.

Шаг 2. Проверка HTTP-сервера

Поначалу веб-сервер требует ручного запуска, поэтому введем команду:

sudo systemctl start httpd

Проверить, запустилась ли служба, можно при помощи команды:

sudo systemctl status httpd

Если веб-сервер работает штатно, пользователь увидит сообщение, в котором должен отразиться статус active (running):

httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disa>
Active: active (running) since Thu 2020-04-23 22:25:33 UTC; 11s ago

Второй способ проверки – открыть хост через браузер по IP-адресу сервера:

http://your_server_ip

Найти IP сервера можно в панели управления или в письме, которое пришло на почту после установки сервера.

Шаг 3. Управление процессом Apache

Теперь можно опробовать некоторые команды systemctl, используемой при взаимодействии со службой. Например, остановка HTTP-сервера будет после ввода:

sudo systemctl stop httpd

Повторный запуск происходит по команде:

sudo systemctl start httpd

Перезапуск, например, для принятия изменений в настройках:

sudo systemctl restart httpd

Возможен рестарт без прерывания текущего соединения:

sudo systemctl reload httpd

По умолчанию процессы Apache запускаются при загрузке сервера. Если это нежелательно, то отключите автозапуск:

sudo systemctl disable httpd

Первоначальные настройки HTTP-сервера предполагают развертывание всего одного сайта. Но есть возможность создать виртуальные хосты, на каждом из которых создают отдельные ресурсы.

Шаг 4. Настройка виртуальных хостов

В системе Apache они схожи с построением в Nginx. Их также используют, чтобы обеспечить разделение конфигурации и развертывание на одной виртуальной машине или физическом сервере двух и более доменов. В этой статье везде будем указывать условный сайт под названием example.com. При работе его заменяют реальным доменом.

Теперь приступим к настройке. Создайте папку html в каталоге example.com (var/www/):

sudo mkdir -p /var/www/example.com/html

В дополнение желательно создать отдельную папку, где будут храниться файлы журнала:

sudo mkdir -p /var/www/example.com/log

Переменной среды $USER назначают права владельца:

sudo chown -R $USER:$USER /var/www/example.com/html

Перед продолжением желательно проверить, что у корневой папки установлены стандартные разрешения:

sudo chmod -R 755 /var/www

Теперь можно в любом редакторе кода сформировать index.html. Например, запустим vi:

sudo vi /var/www/example.com/html/index.html

Внесем простейшее содержимое:

<html>
  <head>
    <title>Welcome to Example.com!</title>
  </head>
  <body>
    <h1>Success! The example.com virtual host is working!</h1>
  </body>
</html>

 После сохранения изменений в index.html у нас почти все готово для генерации файлов. Они задают настройки каждого отдельно взятого домена и транслируют их Apache, чтобы HTTP-сервер понимал, как обрабатывать запросы. Хранить их будем в каталоге sites-available, к нему создается папка sites-enabled, указывающая на готовность хоста принимать трафик из сети:

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

Остается дать команду HTTP-серверу найти виртуальные хосты в папке sites-enabled. Чтобы процесс прошел как надо, нужно предварительно изменить основной конфигурационный файл Apache командой:

sudo vi /etc/httpd/conf/httpd.conf

Затем переместить курсор в самый конец файла и внести там строчку:

...
# Supplemental configuration
#
# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf
IncludeOptional sites-enabled/*.conf

Теперь настало время для формирования непосредственно файла виртуального хоста:

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

В него вносится следующая информация:

<VirtualHost *:80>
    ServerName www.example.com
    ServerAlias example.com
    DocumentRoot /var/www/example.com/html
    ErrorLog /var/www/example.com/log/error.log
    CustomLog /var/www/example.com/log/requests.log combined
</VirtualHost>

Вместо example.com нужно везде проставить реальный домен. Тогда файл укажет веб-серверу, где найти корневой каталог сайта, где сохранять журналы ошибок и обращений к сайту. После закрытия файла с сохранением изменений останется активировать виртуальные хосты – сформировать символьную ссылку для доменов в каталоге sites-enabled:

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

Теперь настройка завершена, и хост готов к функционированию. Но перед перезапуском веб-сервера желательно проверить, что модуль SELinux правильно обрабатывает запросы.

Шаг 5. Настройка разрешений в SELinux

Модуль безопасности Linux SELinux повышает безопасность операционной системы. В CentOS встроен пакет, уже настроенный для взаимодействия с Apache. Но в данном примере мы изменили ее, поэтому при старте служб веб-сервера пользователь получит ошибку. Чтобы решить такую проблему, нужно изменение политик SELinux в отношении Apache. Всего применяют два способа корректировки – универсальный и для конкретной папки.

Вариант №1. Универсальный

Процедура позволяет модулю безопасности использовать любые процессы Apache через булеву переменную httpd_unified. Такой подход удобен, но не рассматривает раздельную политику папок и файлов. Запуск универсальной политики:

sudo setsebool -P httpd_unified 1

Команда setsebool нужна для замены булевых значений, флаг -P – для обновления времени запуска при старте, при каждой перезагрузке оно сохраняется. В данном примере булево значение httpd_unified было активировано со значением 1.

Вариант №2. Корректировка политик Apache для каталога

Отдельная настройка требует дополнительных действий, зато позволяет задавать разрешения для каждого каталога или файла. При выборе этой методики придется вручную задавать тип контекста для каждой новой папки. Например, проверим параметры /var/www/example.com/log командой:

sudo ls -dlZ /var/www/example.com/log/

В результате пользователь увидит сообщение:

drwxr-xr-x. 2 root root unconfined_u:object_r:httpd_sys_content_t:s0 6 Apr 23 23:51 /var/www/example.com/log/

Судя по нему, сейчас используется контекст httpd_sys_content_t, т.е. служба Apache будет читать только те файлы, которые размещены в указанной папке. Если изменить его на httpd_log_t, веб-сервер будет генерировать данные для файла журнала:

sudo semanage fcontext -a -t httpd_log_t "/var/www/example.com/log(/.*)?"

Применить внесенные изменения можно командой:

sudo restorecon -R -v /var/www/example.com/log

Флаг -R позволяет запускать ее рекурсивно с обновлением существующих файлов. Символ -V распечатывает вносимые изменения. Это выглядит так:

Relabeled /var/www/example.com/log from unconfined_u:object_r:httpd_sys_content_t:s0 to unconfined_u:object_r:httpd_log_t:s0

Если хочется убедиться в изменении типа контекста, просмотрите еще раз текущее состояние:

sudo ls -dlZ /var/www/example.com/log/

Вывод на экран:

drwxr-xr-x. 2 root root unconfined_u:object_r:httpd_log_t:s0 6 Apr 23 23:51 /var/www/example.com/log/

Шаг 6. Тестирование виртуального хоста

После перенастройки разрешений в SELinux HTTP-сервер будет без проблем записывать данные в каталог /var/www/example.com/log. Перезапустим процесс Apache:

sudo systemctl restart httpd

Сформируем перечень содержимого каталога /var/www/example.com/log, это позволит убедиться в том, что система создала журнал:

ls -lZ /var/www/example.com/log

Результат выглядит так:

-rw-r--r--. 1 root root system_u:object_r:httpd_log_t:s0 0 Apr 24 00:06 error.log
-rw-r--r--. 1 root root system_u:object_r:httpd_log_t:s0 0 Apr 24 00:06 requests.log

Первая строка подтверждает наличие файла error.log, а вторая – requests.log. Это практически финал, пользователь может проверить работоспособность домена через браузер. В качестве ответа будет примерно такая надпись:

Success! The example.com virtual host is working

Она подтверждает, что виртуальный хост был настроен и начал обслуживать контент. По каждому новому сайту повторяют шаги 4-5, заменив домен на соответствующий.

Выводы

Мы рассмотрели настройку Apache в CentOS под единственный или несколько доменов, расположенных на одной физической или виртуальной машине. После проверки каждого из подключенных сайтов можно разворачивать CMS и приступать к наполнению контентом.

Telegram
VK
Скопировать ссылку

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону