HTTP-сервер Apache – самый популярный веб-сервер. Он предоставляет множество производительных функций, включая динамическую загрузку модулей, надежную поддержку мультимедиа и широкую интеграцию с другим популярным программным обеспечением.
В этом мануале вы узнаете, как установить веб-сервер Apache на сервер CentOS 7.
Требования
- Сервер CentOS 7.
- Пользователь с доступом к sudo (все действия нужно выполнить в сессии этого пользователя). Инструкции можно найти в мануале по начальной настройке сервера.
- Базовый брандмауэр (читайте мануал Дополнительные рекомендации по настройке сервера CentOS 7).
1: Установка Apache
Пакет Apache есть в стандартном репозитории CentOS, потому его можно установить с помощью стандартного пакетного менеджера yum.
Как пользователь с правами sudo, обновите индекс локальных пакетов:
sudo yum update httpd
Затем введите команду:
sudo yum install httpd
Команда установит Apache и его зависимости. Теперь можно запустить сервис.
2: Проверка веб-сервера
В CentOS веб-сервер Apache не запускается автоматически после завершения установки. Вам нужно запустить Apache вручную:
sudo systemctl start httpd
Убедитесь, что сервер запущен:
sudo systemctl status httpd
Redirecting to /bin/systemctl status httpd.service
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2019-02-20 01:29:08 UTC; 5s ago
Docs: man:httpd(8)
man:apachectl(8)
Main PID: 1290 (httpd)
Status: "Processing requests..."
CGroup: /system.slice/httpd.service
├─1290 /usr/sbin/httpd -DFOREGROUND
├─1291 /usr/sbin/httpd -DFOREGROUND
├─1292 /usr/sbin/httpd -DFOREGROUND
├─1293 /usr/sbin/httpd -DFOREGROUND
├─1294 /usr/sbin/httpd -DFOREGROUND
└─1295 /usr/sbin/httpd -DFOREGROUND
...
В выводе должен быть статус active.
Согласно выводу сервис работает правильно. Но лучше также запросить страницу Apache, чтобы подтвердить работу веб-сервера.
Чтобы открыть стандартную посадочную страницу Apache, укажите свое доменное имя или IP сервера.
Если у вас нет домена, укажите внешний IP-адрес своего сервера. Если вы не знаете свой IP-адрес, вы можете узнать его с помощью командной строки. Введите:
hostname -I
Вы получите список адресов, разделенных пробелами. Проверьте каждый адрес в браузере.
Также вы можете узнать свой IP, запросив его с помощью команды curl:
curl -4 icanhazip.com
Узнав свой внешний адрес, введите в браузер:
http://your_server_ip
Вы увидите стандартную страницу Apache для CentOS 7.
Эта страница позволяет убедиться, что Apache работает правильно; также она содержит базовую информацию о важных файлах и каталогах Apache.
3: Управление процессами Apache
Чтобы остановить сервер, введите:
sudo systemctl stop httpd
Запустить сервер может команда:
sudo systemctl start httpd
Для перезапуска используйте:
sudo systemctl restart httpd
Во время настройки Apache можно часто перезагружать, не сбрасывая соединений. Для этого вы можете использовать команду:
sudo systemctl reload httpd
По умолчанию Apache запускается автоматически вместе с сервером. Чтобы удалить Apache из автозагрузки, отключите сервис:
sudo systemctl disable httpd
Чтобы добавить Apache в автозагрузку, используйте команду:
sudo systemctl enable httpd
Стандартная настройка Apache позволяет вам разместить один сайт. Если вы хотите обслуживать больше сайтов, нужно настроить виртуальные хосты.
5: Настройка виртуального хоста (рекомендуется)
На веб-сервере Apache вы можете использовать виртуальные хосты (аналогичные блокам server в Nginx) для изоляции настроек и размещения нескольких доменов на одном сервере. Здесь используется условный домен example.com, но вы должны заменить его собственным доменом.
Apache в CentOS 7 по умолчанию предоставляет один включенный виртуальный хост, который обслуживает каталог /var/www/html. Этого хватит для обслуживания одного сайта, но если вы хотите разместить несколько сайтов, вам нужно создать новые виртуальные хосты. Создайте структуру каталогов в /var/www для сайта example.com, а /var/www/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
Установите привилегии:
sudo chmod -R 755 /var/www
Затем создайте образец страницы index.html с помощью любого редактора:
sudo vi /var/www/example.com/html/index.html
Нажмите i, чтоб перейти в режим INSERT, и вставьте в файл:
<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. Для этого отредактируйте главный конфигурационный файл:
sudo vi /etc/httpd/conf/httpd.conf
В конец файла добавьте строку:
IncludeOptional sites-enabled/*.conf
Сохраните и закройте файл. Теперь можно создать сам виртуальный хост.
sudo vi /etc/httpd/sites-available/example.com.conf
Вставьте в файл следующие конфигурации. Замените example.com своим доменом:
<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 знает, где хранить логи ошибок и запросов этого сайта.
Сохраните и закройте файл.
Включите файл, создав символьную ссылку на этот виртуальный хост в каталоге sites-enabled (так Apache будет понимать, что этот сайт нужно обслуживать):
sudo ln -s /etc/httpd/sites-available/example.com.conf /etc/httpd/sites-enabled/example.com.conf
Ваш виртуальный хост настроен и готов к обслуживанию контента. Прежде чем перезапустить сервис Apache, убедитесь, что политики SELinux для виртуальных хостов установлены правильно.
5: Настройка прав SELinux для виртуального хоста
SELinux поддерживает стандартные параметры Apache. Поскольку в файле виртуального хоста вы настроили пользовательский каталог логов, вы получите сообщение об ошибке, если попытаетесь запустить сервис Apache. Чтобы решить эту проблему, вам нужно обновить политики SELinux и позволить Apache изменять некоторые файлы. SELinux повышает безопасность среды CentOS 7, поэтому полностью отключать модуль ядра не рекомендуется.
Существуют различные способы установки политик в зависимости от потребностей вашей среды (SELinux позволяет настраивать уровень безопасности). Этот раздел продемонстрирует два метода настройки политик Apache: глобальный и в определенном каталоге. Корректировка политик для отдельного каталога более безопасна и поэтому является рекомендуемым подходом.
Глобальное изменение политик 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 -dZ /var/www/example.com/log/
Эта команда выводит список всех контекстов SELinux для каталогов:
drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /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 выведет изменения контекста, которые выполнила команда. Вы увидите следующий вывод, подтверждающий изменения:
restorecon reset /var/www/example.com/log context unconfined_u:object_r:httpd_sys_content_t:s0->unconfined_u:object_r:httpd_log_t:s0
Снова запросите список контекстов:
sudo ls -dZ /var/www/example.com/log/
Вы увидите изменения:
drwxr-xr-x. root root unconfined_u:object_r:httpd_log_t:s0 /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 0 Feb 26 22:54 error.log
-rw-r--r--. 1 root root 0 Feb 26 22:54 requests.log
Теперь, когда виртуальный хост и привилегии SELinux настроены, Apache будет обслуживать ваш домен. Вы можете проверить его работу, перейдя по ссылке http://example.com, где вы должны увидеть строку:
Success! The example.com virtual host is working!
Если страница открылась, значит виртуальный хост успешно настроен и обслуживает контент. Повторите разделы 4 и 5, чтобы создать новые виртуальные хосты и обновить привилегии SELinux.
Заключение
В этом мануале вы научились устанавливать и управлять веб-сервером Apache. Теперь у вас есть много вариантов: вы можете выбрать тип контента, который хотите обслуживать, и внедрить дополнительные технологии для создания более сложного сайта.
Если вы хотите установить полный стек приложений, читайте Установка LAMP stack на CentOS 7.