HTTP-сервер Apache — самый широко используемый веб-сервер в мире. Он имеет множество мощных функций, включая динамически загружаемые модули, надежную поддержку различных медиаформатов и интеграцию с другим популярным программным обеспечением.
В этом руководства вы установите веб-сервер Apache с виртуальными хостами на сервер на базе CentOS 7.
Для выполнения данного руководства вам потребуется следующее:
Apache доступен в используемых по умолчанию репозиториях программного обеспечения CentOS, т. е. вы можете установить его с помощью менеджера пакетов yum
.
С помощью пользователя sudo без прав root, настроенного согласно предварительным требованиям, обновите локальный индекс пакета Apache httpd
, чтобы отразить последние изменения:
- sudo yum update httpd
После обновления пакетов установите пакет Apache:
- sudo yum install httpd
После подтверждения установки yum
выполнит установку Apache и всех требуемых зависимостей.
Если вы выполнили указания руководства Дополнительные рекомендуемые шаги для новых серверов CentOS 7, указанные в разделе предварительных требований, на вашем сервере установлен брандмауэр firewalld
, и вам нужно открыть порт 80
, чтобы дать Apache возможность обслуживать запросы через HTTP. Если вы еще не сделали этого, вы можете активировать в брандмауэре firewalld
службу http
с помощью следующей команды:
- sudo firewall-cmd --permanent --add-service=http
Если вы планируете настроить Apache для обслуживания запросов через HTTPS, вам также нужно открыть порт 443
, включив службу https
:
- sudo firewall-cmd --permanent --add-service=https
Затем перезагрузите брандмауэр, чтобы новые правила начали действовать:
- sudo firewall-cmd --reload
После перезагрузки брандмауэра вы будете готовы запустить службу и проверить веб-сервер.
Apache не запускается автоматически на CentOS после завершения установки. Вам нужно будет запустить процесс Apache вручную:
- sudo systemctl start httpd
Убедитесь, что служба запущена с помощью следующей команды:
- sudo systemctl status httpd
Если служба запущена, вы увидите значение active
(активна) в статусе:
OutputRedirecting 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
...
Как видно из результатов, служба успешно запущена. Однако лучше всего протестировать ее запуск посредством запроса страницы из Apache.
Откройте страницу Apache по умолчанию, чтобы подтвердить работу программного обеспечения через ваш IP-адрес: Если вы не знаете IP-адрес вашего сервера, есть несколько способов узнать его с помощью командной строки.
Введите следующие данные в командной строке сервера:
- hostname -I
Эта команда отобразит все сетевые адреса хоста, и вы получите несколько IP-адресов, разделенных пробелами. Вы можете попробовать каждый из них в браузере, чтобы убедиться в их работоспособности.
Также в качестве альтернативы вы можете использовать curl
для запроса IP-адреса icanhazip.com
, который предоставит вам ваш публичный IPv4-адрес, видимый в другом месте в Интернете:
- curl -4 icanhazip.com
Когда вы узнаете IP-адрес вашего сервера, введите его в адресную строку браузера:
http://your_server_ip
Вы увидите стандартную веб-страницу Apache в CentOS 7:
Эта страница показывает, что Apache работает корректно. Также на ней содержится информация о важных файлах Apache и расположении директорий. Теперь, когда служба установлена и запущена, вы можете использовать различные команды systemctl
для управления службой.
Теперь ваш веб-сервер запущен и работает, и настало время изучить некоторые простые команды управления.
Чтобы остановить веб-сервер, введите:
- sudo systemctl stop httpd
Чтобы запустить остановленный веб-сервер, введите:
- sudo systemctl start httpd
Чтобы остановить и снова запустить службу, введите:
- sudo systemctl restart httpd
Если вы просто вносите изменения в конфигурацию, во многих случаях Apache может перезагружаться без отключения соединений. Для этого нужно использовать следующую команду:
- sudo systemctl reload httpd
По умолчанию Apache настроен на автоматический запуск при загрузке сервера. Если вы не хотите этого, отключите такое поведение с помощью следующей команды:
- sudo systemctl disable httpd
Чтобы перезагрузить службу для запуска во время загрузки, введите:
- sudo systemctl enable httpd
Apache должен будет запуститься автоматически при следующей загрузке сервера.
Конфигурация по умолчанию для Apache позволит вашему серверу размещать один веб-сайт. Если вы планируете разместить несколько доменов на сервере, вам нужно будет настроить виртуальные хосты на веб-сервере Apache.
При использовании веб-сервера Apache вы можете использовать виртуальные хосты (аналогичные серверным блокам в Nginx) для инкапсуляции данных конфигурации и размещения на одном сервере нескольких доменов. На этом шаге мы будем настраивать домен с именем example.com
, но вы должны будете заменить его собственным доменным именем. Чтобы узнать больше о настройке доменного имени с помощью DigitalOcean, пройдите наше обучающее руководство Введение в DigitalOcean DNS.
В Apache в CentOS 7 по умолчанию включен один серверный блок, настроенный на обслуживание документов из директории /var/www/html
. Хотя это хорошо работает для отдельного сайта, при хостинге нескольких сайтов это неудобно. Вместо изменения /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
Затем назначьте права владения для директории html
с помощью переменной среды $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
Нажмите 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
.
Создав директорию сайта и пример файла index, вы уже почти готовы к созданию файлов виртуального хоста. Файлы виртуального хоста определяют конфигурацию отдельных сайтов и указывают веб-серверу Apache, как отвечать на различные запросы доменов.
Перед созданием ваших виртуальных хостов вам нужно будет создать директорию sites-available
, чтобы хранить их в этой директории. Также вы должны будете создать директорию sites-enabled
, которая указывает Apache, что виртуальный хост готов к обслуживанию посетителей. Директория sites-enabled
будет хранить символьные ссылки на виртуальные хосты, которые мы хотим опубликовать. Создайте обе директории с помощью следующей команды:
- sudo mkdir /etc/httpd/sites-available /etc/httpd/sites-enabled
Затем вы должны попросить Apache выполнить поиск виртуальных хостов в директории sites-enabled
. Для этого необходимо изменить главный файл конфигурации Apache и добавить строку, объявляющую опциональную директорию для дополнительных файлов конфигурации:
- sudo vi /etc/httpd/conf/httpd.conf
Добавьте эту строку в конец файла:
IncludeOptional sites-enabled/*.conf
Сохраните и закройте файл после добавления этого кода. Теперь, когда у вас есть директории виртуального хоста, вы можете создать ваш файл виртуального хоста.
Начните с создания нового файла в директории sites-available
:
- 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 будет хранить ошибки и журналы запросов для этого сайта.
Сохраните файл и закройте его после завершения.
Теперь, когда вы создали файлы виртуального хоста, вы должны будете активировать их, чтобы Apache смог предоставлять их посетителям. Для этого нужно создать символьную ссылку для каждого виртуального хоста в директории sites-enabled
:
- sudo ln -s /etc/httpd/sites-available/example.com.conf /etc/httpd/sites-enabled/example.com.conf
Теперь ваш виртуальный хост настроен и готов к предоставлению контента. Прежде чем перезапускать службу Apache, давайте убедимся, что SELinux располагает правильными политиками для ваших виртуальных хостов.
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 -dZ /var/www/example.com/log/
Эта команда формирует список и выводит контекст SELinux из директории. Вы увидите примерно следующий результат:
Outputdrwxr-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
будет распечатывать изменения контекста, внесенные командой. Вы увидите следующий вывод, подтверждающий изменения:
Outputrestorecon 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/
Результат отражает обновленный тип контекста:
Outputdrwxr-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
, вы готовы протестировать вашу конфигурацию виртуального хоста.
После обновления контекста 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 удалось создать файлы errors.log
и requests.log
, которые указаны в конфигурации виртуального хоста:
Output-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
, после чего должны увидеть примерно следующее:
Это подтверждает, что ваш виртуальный хост успешно настроен и обслуживает контент. Повторите шаги 4 и 5 для создания новых виртуальных хостов с разрешениями SELinux для дополнительных доменов.
В ходе данного руководства вы установили и управляли веб-сервером Apache. Теперь вы установили веб-сервер и у вас есть богатые возможности выбора типа обслуживаемого контента и технологий для расширения возможностей пользователя.
Если вы хотите развернуть более полный комплекс приложений, ознакомьтесь с этой статьей Настройка набора LAMP в CentOS 7.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!