Установка веб-сервера Apache в CentOS 8

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

В этом мануале вы узнаете, как установить веб-сервер Apache на CentOS 8.

Требования

  • Сервер CentOS 8.
  • Пользователь с доступом к sudo (все действия руководства нужно выполнять в сессии этого пользователя).
  • Базовый брандмауэр.

Все необходимые инструкции можно найти в мануале по начальной настройке сервера.

1: Установка Apache

Пакет Apache есть в стандартном репозитории CentOS, потому его можно установить с помощью стандартного пакетного менеджера dnf.

Установите пакет httpd с помощью команды:

sudo dnf install httpd

Команда установит Apache и все его зависимости.

Выполнив раздел 4 мануала по начальной настройке, вы включили на своем сервере базовый брандмауэр firewalld, который обслуживает трафик HTTP.

Если вы хотите, чтобы Apache также мог обслуживать HTTPS, вам нужно открыть в брандмауэре порт 443:

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

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

sudo firewall-cmd --reload

Теперь можно запустить сервис и проверить, как он работает.

2: Проверка веб-сервера

После установки веб-сервера система CentOS не запускает Apache автоматически.

Чтобы запустить веб-сервер вручную, введите:

sudo systemctl start httpd

Чтобы убедиться, что он запустился, запросите его состояние:

sudo systemctl status httpd

В выводе вы должны увидеть состояние active:

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
Docs: man:httpd.service(8)
Main PID: 14219 (httpd)
Status: "Running, listening on: port 80"
Tasks: 213 (limit: 5059)
Memory: 24.9M
CGroup: /system.slice/httpd.service
├─14219 /usr/sbin/httpd -DFOREGROUND
├─14220 /usr/sbin/httpd -DFOREGROUND
├─14221 /usr/sbin/httpd -DFOREGROUND
├─14222 /usr/sbin/httpd -DFOREGROUND
└─14223 /usr/sbin/httpd -DFOREGROUND
...

Согласно этому выводу сервис успешно запустился. Но лучше также запросить страницу Apache, чтобы подтвердить, что веб-сервер работает правильно.

Чтобы открыть стандартную посадочную страницу Apache, укажите свой домен. Если у вас нет домена, введите внешний IP-адрес своего сервера. Если вы не знаете свой IP-адрес, вы можете узнать его с помощью команды:

hostname -I

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

Также вы можете узнать свой IP, запросив его с помощью команды curl.

Чтобы извлечь адрес с icanhazip.com (IPv4) с помощью curl, введите:

curl -4 icanhazip.com

Узнав свой внешний адрес, введите в браузер:

http://your_server_ip

Вы увидите стандартную страницу Apache для CentOS 8.

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

3: Управление процессами Apache

Теперь давайте посмотрим, как управлять веб-сервером с помощью systemctl.

Чтобы остановить его, введите:

sudo systemctl stop httpd

Запустить веб-сервер поможет команда:

sudo systemctl start httpd

Для перезапуска используйте команду:

sudo systemctl restart httpd

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

sudo systemctl reload httpd

По умолчанию Apache добавлен в автозагрузку (то есть он запускается автоматически вместе с сервером). Чтобы удалить этот сервис из автозагрузки, отключите его:

sudo systemctl disable httpd

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

sudo systemctl enable httpd

Теперь Apache будет снова запускаться автоматически.

Стандартная конфигурация Apache позволяет обслуживать один сайт. Если вы хотите, чтобы ваш сервер обслуживал больше сайтов, вам нужно создать виртуальные хосты для новых сайтов.

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

На веб-сервере Apache вы можете использовать виртуальные хосты (в Nginx это блоки server) для изоляции настроек и размещения нескольких доменов на одном сервере. Здесь используется условный домен example.com, который вы должны заменить доменом вашего сайта.

В CentOS 8 веб-сервер Apache по умолчанию предоставляет один включенный виртуальный хост, который обслуживает каталог /var/www/html. Этого хватит для работы одного сайта, но если вы хотите разместить несколько сайтов, вам нужно создать новые виртуальные хосты. Создайте структуру каталогов в  /var/www для сайта example.com, а /var/www/html оставьте как каталог по умолчанию, который будет обслуживаться, если запрос клиента не соответствует другим сайтам.

Создайте каталог html для example.com. Используйте флаг –p, чтобы создать все необходимые родительские каталоги:

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

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

sudo chmod -R 755 /var/www

Затем создайте образец страницы index.html с помощью текстового редактора vi:

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

Нажмите i, чтобы перейти в режим вставки (INSERT), а затем добавьте в файл следующий код HTML:

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

Сохраните и закройте файл (нажмите Esc, :wq, затем Enter).

У вас есть почти всё для создания виртуального хоста. Файлы виртуальных хостов определяют конфигурацию отдельных сайтов и сообщают веб-серверу Apache, как реагировать на запросы к разным доменам.

Прежде чем создать виртуальные хосты, вам нужно создать каталог sites-available, в котором они будут храниться. Также вам понадобится каталог sites-enabled, с помощью которого Apache определяет, что виртуальный хост готов обслуживать посетителей. Каталог sites-enabled будет содержать символические ссылки (симлинки) на виртуальные хосты сайтов, которые должны быть в публичном доступе. Создайте оба каталога с помощью следующей команды:

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

Далее нужно сообщить Apache, что он должен искать виртуальные хосты в каталоге sites-enabled. Для этого отредактируйте главный конфигурационный файл Apache в редакторе vi или другом редакторе.

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

Нажмите заглавную G, чтобы перейти в конец файла. Затем нажмите i, чтобы переключиться в режим INSERT, и добавьте следующую строку в самый конец файла:

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

Сохраните и закройте файл, когда закончите. Теперь, когда у вас есть все каталоги, необходимые для виртуальных хостов, вы можете создать файл виртуального хоста в каталоге sites-available:

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>

Этот файл расскажет Apache, где найти корневой каталог, который содержит общедоступные веб-документы. Он также сообщает Apache, где регистрировать ошибки и запрашивать логи для этого конкретного сайта.

Сохраните и закройте файл.

Теперь, когда вы создали файлы виртуального хоста, вы можете включить его, чтобы Apache знал, как обслуживать ваш сайт. Для этого создайте симлинк в каталоге sites-enabled (если хостов несколько, сделайте это для каждого виртуального хоста):

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

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

5: Настройка прав SELinux для виртуального хоста

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

Читайте также: Введение в SELinux в CentOS 7: базовые понятия

Существуют различные способы установки политик в зависимости от потребностей вашей среды (SELinux позволяет настраивать уровень безопасности). Этот раздел продемонстрирует два метода настройки политик Apache: глобальный и в определенном каталоге. Корректировка политик для отдельного каталога более безопасна и поэтому является рекомендуемым подходом.

Глобальное изменение политик Apache

При глобальной настройке политики SELinux будет одинаково обрабатывать все процессы Apache, применяя логическое значение httpd_unified. Этот подход более удобен, но он менее гибкий и безопасный.

Выполните следующую команду, чтобы установить универсальную политику Apache:

sudo setsebool -P httpd_unified 1

Команда setsebool изменяет логические значения SELinux. Флаг -P обновит значение времени загрузки, сохраняя это изменение при перезагрузках. httpd_unified — это логическое значение, благодаря которому SELinux будет обрабатывать все процессы Apache как один и тот же тип. Значение 1 включает его.

Изменение политики по каталогам

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

Сначала проверьте тип контекста, который SELinux предоставил каталогу /var/www/example.com/log:

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

Эта команда выводит список всех контекстов SELinux для каталогов:

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, который говорит SELinux, что процесс Apache может только читать файлы, созданные в этом каталоге. Нам нужно изменить тип контекста каталога /var/www/example.com/log на httpd_log_t. Этот тип позволит Apache создавать и добавлять файлы логов веб-приложений:

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

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

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/

Теперь, когда каталог /var/www/example.com/log использует тип httpd_log_t, вы можете протестировать конфигурацию виртуального хоста.

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

Как только вы обновите контекст SELinux (любым из методов), Apache сможет записывать и изменять файлы в каталоге /var/www/example.com/log. Теперь вы можете перезапустить сервис Apache:

sudo systemctl restart httpd

Запросите содержимое каталога /var/www/example.com/log, чтобы увидеть, создал ли Apache файлы логов:

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

Вы увидите, что Apache смог создать файлы error.log и requests.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

Теперь, когда виртуальный хост и привилегии SELinux настроены, Apache будет обслуживать ваш домен. Вы можете проверить его работу, перейдя по ссылке http://example.com, где вы должны увидеть строку:

Success! The example.com virtual host is working!

Если страница открылась, ваш виртуальный хост настроен и успешно обслуживает контент. Повторите разделы 4 и 5, чтобы создать новые виртуальные хосты и обновить привилегии SELinux для их обслуживания.

Заключение

В этом мануале вы научились устанавливать веб-сервер Apache и управлять его процессом. Теперь у вас есть много вариантов для дальнейшей работы: вы можете выбрать тип контента, который хотите обслуживать, и внедрить дополнительные технологии для создания более сложного сайта.

Читайте также: Установка LAMP stack на CentOS 8

Tags: , , ,

Добавить комментарий