HTTP-сервер Apache – наиболее распространенный в интернете веб-сервер. Он предоставляет множество полезных функций, включая динамическую загрузку модулей, надежную поддержку мультимедиа и широкую интеграцию с другим популярным программным обеспечением.
В этом мануале мы вкратце расскажем, как установить веб-сервер Apache на CentOS 8.
Примечание: Расширенную версию этого мануала вы найдете здесь.
Требования
- Сервер CentOS 8.
- Пользователь с доступом к sudo (все действия руководства нужно выполнять в сессии этого пользователя).
- Базовый брандмауэр.
Все необходимые инструкции можно найти в мануале по начальной настройке сервера.
1: Установка Apache
Пакет Apache есть в стандартном репозитории CentOS, потому его можно установить с помощью менеджера dnf.
Установите пакет httpd:
sudo dnf install httpd
Команда установит Apache и все его зависимости.
2: Настройка брандмауэра
Выполнив раздел 4 мануала по начальной настройке, вы включили на своем сервере базовый брандмауэр firewalld, который обслуживает трафик HTTP.
Если вы хотите, чтобы Apache также мог обслуживать HTTPS, вам нужно открыть в брандмауэре порт 443:
sudo firewall-cmd --permanent --add-service=https
Перезапустите брандмауэр, чтобы обновить настройки.
sudo firewall-cmd --reload
Теперь можно запустить сервис и проверить, как он работает.
3: Тестирование веб-сервера
После установки веб-сервера система 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, укажите свой домен или внешний IP-адрес своего сервера.
http://your_server_ip
Вы увидите стандартную страницу Apache для CentOS 8.
Эта страница позволяет убедиться, что веб-сервер Apache работает правильно; также она содержит базовую информацию о важных файлах и каталогах Apache.
4: Настройка виртуальных хостов
На веб-сервере Apache вы можете использовать виртуальные хосты (в Nginx это блоки server) для изоляции настроек и размещения нескольких доменов на одном сервере.
Примечание: Здесь используется условный домен example.com, который вы должны заменить доменом вашего сайта.
Создайте каталог 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>
Сохраните и закройте файл, когда закончите.
Теперь, когда у вас есть все каталоги, необходимые для виртуальных хостов, вы можете создать файл виртуального хоста. Эти файлы помогут вам разместить несколько сайтов на одном сервере.
Для начала создайте каталог sites-available и 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 в CentOS 8