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

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

В этом мануале вы узнаете, как установить веб-сервер Apache на сервер 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.

Tags: , ,