Поиск по сайту:

Как настроить автономный сервер Apache с виртуальным хостингом на основе имени и SSL-сертификатом. Часть 4.


LFCE (сокращение от Сертифицированный инженер Linux Foundation) – это обученный специалист, обладающий опытом установки, управления и устранения неполадок сетевых служб в системах Linux, а также отвечающий за проектирование, внедрение и постоянное обслуживание системной архитектуры.

В этой статье мы покажем вам, как настроить Apache для обслуживания веб-контента, а также как настроить виртуальные хосты на основе имени и SSL, включая самозаверяющий сертификат.

Представляем программу сертификации Linux Foundation (LFCE).

Примечание. Эта статья не должна быть исчерпывающим руководством по Apache, а скорее отправной точкой для самостоятельного изучения этой темы для LFCE< /б> экзамен. По этой причине в этом руководстве мы также не рассматриваем балансировку нагрузки с помощью Apache.

Возможно, вы уже знаете другие способы выполнения тех же задач, и это нормально, учитывая, что сертификация Linux Foundation строго основана на производительности. Таким образом, если вы «выполняете работу», у вас есть хорошие шансы сдать экзамен.

Требования

Инструкции по установке и запуску Apache см. в Части 1 текущей серии («Установка сетевых служб и настройка автоматического запуска при загрузке»).

К этому моменту у вас должен быть установлен и запущен веб-сервер Apache. Вы можете проверить это с помощью следующей команды.

ps -ef | grep -Ei '(apache|httpd)' | grep -v grep

Примечание. Приведенная выше команда проверяет наличие apache или httpd (наиболее распространенные имена для веб-демон) в списке запущенных процессов. Если Apache запущен, вы получите вывод, аналогичный следующему.

Самый лучший способ протестировать установку Apache и проверить, работает ли она, — запустить веб-браузер и указать IP-адрес сервера. Нам должен быть представлен следующий экран или, по крайней мере, сообщение, подтверждающее, что Apache работает.

Настройка Apache

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

/etc/apache2/apache2.conf 		[For Ubuntu]
/etc/httpd/conf/httpd.conf		[For CentOS]
/etc/apache2/httpd.conf 		[For openSUSE]

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

Обслуживание страниц на автономном сервере с помощью Apache

Самое простое использование Apache — обслуживание веб-страниц на автономном сервере, на котором еще не настроены виртуальные хосты. Директива DocumentRoot указывает каталог, из которого Apache будет обслуживать документы веб-страниц.

Обратите внимание, что по умолчанию все запросы берутся из этого каталога, но вы также можете использовать символические ссылки и/или псевдонимы, которые могут указывать и на другие места.

Если это не соответствует директиве Alias (которая позволяет хранить документы в локальной файловой системе, а не в каталоге, указанном DocumentRoot), сервер добавляет путь из запрошенного URL-адреса. в корень документа, чтобы указать путь к документу.

Например, учитывая следующий DocumentRoot:

Когда веб-браузер указывает на [IP-адрес сервера или имя хоста]/lfce/tecmint.html, сервер открывает /var/ www/html/lfce/tecmint.html (при условии, что такой файл существует) и сохраните событие в журнале доступа с ответом 200 (ОК).

Журнал доступа обычно находится внутри /var/log под репрезентативным именем, например access.log или access_log. Вы даже можете найти этот журнал (а также журнал ошибок) внутри подкаталога (например, /var/log/httpd в CentOS). В противном случае событие сбоя все равно будет зарегистрировано в журнале доступа, но с ответом 404 (не найдено).

Кроме того, неудавшиеся события будут записаны в журнал ошибок:

Формат журнала доступа можно настроить в соответствии с вашими потребностями с помощью директивы LogFormat в основном файле конфигурации, тогда как вы не можете сделать то же самое с журналом ошибок. .

Формат журнала доступа по умолчанию следующий:

LogFormat "%h %l %u %t \"%r\" %>s %b" [nickname]

Где каждая буква, которой предшествует знак процента, указывает на то, что сервер должен регистрировать определенную часть информации:

String

Описание

 %h

 Имя или IP-адрес удаленного хоста

 %l

 Имя удаленного журнала

 %u

 Удаленный пользователь, если запрос подтвержден

 %t

 Дата и время получения запроса

 %r

 Первая строка запроса к серверу

 %>s

 Окончательный статус запроса

 %b

 Размер ответа [байты]

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

Дополнительные параметры можно найти в директиве LogFormat [раздел «Пользовательские форматы журналов»] в документации Apache.

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

Наконец, еще одна важная директива — Listen, которая сообщает серверу принимать входящие запросы на указанный порт или комбинацию адрес/порт:

Если определен только номер порта, Apache будет прослушивать данный порт на всех сетевых интерфейсах (подстановочный знак * используется для обозначения «всех сетевых интерфейсов»).

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

Обратите внимание (как вы увидите в примерах ниже), что несколько директив Listen могут использоваться одновременно для указания нескольких адресов и портов для прослушивания. Эта опция указывает серверу отвечать на запросы с любого из перечисленных адресов и портов.

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

Концепция виртуального хоста определяет отдельный сайт (или домен), который обслуживается одной и той же физической машиной. Фактически, несколько сайтов/доменов могут обслуживаться с одного «реального» сервера в качестве виртуального хоста. Этот процесс прозрачен для конечного пользователя, которому кажется, что разные сайты обслуживаются разными веб-серверами.

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

Каждый виртуальный хост настраивается в каталоге DocumentRoot. В нашем случае мы будем использовать следующие фиктивные домены для настройки тестирования, каждый из которых расположен в соответствующем каталоге:

  1. ilovelinux.com – /var/www/html/ilovelinux.com/public_html
  2. linuxrocks.org – /var/www/html/linuxrocks.org/public_html

Чтобы страницы отображались правильно, мы измените каталог каждого VirtualHost на 755:

chmod -R 755 /var/www/html/ilovelinux.com/public_html
chmod -R 755 /var/www/html/linuxrocks.org/public_html

Затем создайте образец файла index.html внутри каждого каталога public_html:

<html>
  <head>
    <title>www.ilovelinux.com</title>
  </head>
  <body>
    <h1>This is the main page of www.ilovelinux.com</h1>
  </body>
</html>

Наконец, в CentOS и openSUSE добавьте следующий раздел внизу /etc/httpd/conf/httpd.conf или / etc/apache2/httpd.conf соответственно, или просто измените его, если он уже существует.


<VirtualHost *:80>
     ServerAdmin [email  
     DocumentRoot /var/www/html/ilovelinux.com/public_html
     ServerName www.ilovelinux.com
     ServerAlias www.ilovelinux.com ilovelinux.com
     ErrorLog /var/www/html/ilovelinux.com/error.log
     LogFormat "%v %l %u %t \"%r\" %>s %b" myvhost
     CustomLog /var/www/html/ilovelinux.com/access.log	myvhost
</VirtualHost>
<VirtualHost *:80>
     ServerAdmin [email  
     DocumentRoot /var/www/html/linuxrocks.org/public_html
     ServerName www.linuxrocks.org
     ServerAlias www.linuxrocks.org linuxrocks.org
     ErrorLog /var/www/html/linuxrocks.org/error.log
     LogFormat "%v %l %u %t \"%r\" %>s %b" myvhost
     CustomLog /var/www/html/linuxrocks.org/access.log	myvhost
</VirtualHost>

Обратите внимание, что вы также можете добавить каждое определение виртуального хоста в отдельные файлы внутри каталога /etc/httpd/conf.d. Если вы решите это сделать, каждый файл конфигурации должен быть назван следующим образом:

/etc/httpd/conf.d/ilovelinux.com.conf
/etc/httpd/conf.d/linuxrocks.org.conf

Другими словами, вам необходимо добавить .conf к имени сайта или домена.

В Ubuntu каждый отдельный файл конфигурации называется /etc/apache2/sites-available/[имя сайта].conf. Затем каждый сайт включается или отключается с помощью команд a2ensite или a2dissite соответственно следующим образом.

a2ensite /etc/apache2/sites-available/ilovelinux.com.conf
a2dissite /etc/apache2/sites-available/ilovelinux.com.conf
a2ensite /etc/apache2/sites-available/linuxrocks.org.conf
a2dissite /etc/apache2/sites-available/linuxrocks.org.conf

Команды a2ensite и a2dissite создают ссылки на файл конфигурации виртуального хоста и помещают (или удаляют) их в папку /etc/apache2/sites-enabled каталог.

Чтобы иметь возможность просматривать оба сайта с другого компьютера Linux, вам необходимо добавить следующие строки в файл /etc/hosts на этом компьютере, чтобы перенаправлять запросы к этим доменам на определенный IP-адрес. адрес.


[IP address of your web server]	www.ilovelinux.com
[IP address of your web server]	www.linuxrocks.org 

В качестве меры безопасности SELinux не позволит Apache записывать журналы в каталог, отличный от каталога по умолчанию /var/log/httpd.

Вы можете либо отключить SELinux, либо установить правильный контекст безопасности:


chcon system_u:object_r:httpd_log_t:s0 /var/www/html/xxxxxx/error.log

где xxxxxx — это каталог внутри /var/www/html, где вы определили свои виртуальные хосты.

После перезапуска Apache вы должны увидеть следующую страницу по указанным выше адресам:

Установка и настройка SSL с помощью Apache

Наконец, мы создадим и установим самозаверяющий сертификат для использования с Apache. Такая установка приемлема в небольших средах, например в частной локальной сети.

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

В CentOS и openSUSE вам необходимо установить пакет mod_ssl.

yum update && yum install mod_ssl 		[On CentOS]
zypper refresh && zypper install mod_ssl	[On openSUSE]

А в Ubuntu вам придется включить модуль SSL для Apache.

a2enmod ssl

Следующие шаги объясняются с использованием тестового сервера CentOS, но ваша настройка должна быть практически идентична в других дистрибутивах (если у вас возникнут какие-либо проблемы, не стесняйтесь оставлять свои вопросы в комментариях). форма).

Шаг 1 [необязательно]. Создайте каталог для хранения сертификатов.

mkdir /etc/httpd/ssl-certs

Шаг 2. Создайте самозаверяющий сертификат и ключ, который будет его защищать.

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/httpd/ssl-certs/apache.key -out /etc/httpd/ssl-certs/apache.crt

Краткое объяснение перечисленных выше опций:

  1. req -X509 указывает, что мы создаем сертификат x509.
  2. -nodes (NO DES) означает «не шифровать ключ».
  3. -days 365 — количество дней, в течение которых сертификат будет действителен.
  4. -newkey rsa:2048 создает 2048-битный ключ RSA.
  5. -keyout /etc/httpd/ssl-certs/apache.key — это абсолютный путь к ключу RSA.
  6. -out /etc/httpd/ssl-certs/apache.crt — абсолютный путь к сертификату.

Шаг 3. Откройте выбранный вами файл конфигурации виртуального хоста (или соответствующий раздел в /etc/httpd/conf/httpd.conf, как описано ранее) и добавьте следующие строки в объявление виртуального хоста, прослушивающее порт 443.

SSLEngine on
SSLCertificateFile /etc/httpd/ssl-certs/apache.crt
SSLCertificateKeyFile /etc/httpd/ssl-certs/apache.key

Обратите внимание, что вам нужно добавить.

NameVirtualHost *:443

вверху, прямо внизу

NameVirtualHost *:80

Обе директивы предписывают Apache прослушивать порты 443 и 80 всех сетевых интерфейсов.

Следующий пример взят из /etc/httpd/conf/httpd.conf:

Затем перезапустите Apache,

service apache2 restart 			[sysvinit and upstart based systems]
systemctl restart httpd.service 		[systemd-based systems]

И укажите в браузере https://www.ilovelinux.com. Вам будет представлен следующий экран.

Нажмите «Я понимаю риски» и «Добавить исключение».

Наконец, установите флажок «Постоянно сохранить это исключение» и нажмите «Подтвердить исключение безопасности».

Вы будете перенаправлены на вашу домашнюю страницу с помощью https.

Краткое содержание

В этом посте мы показали, как настроить виртуальный хостинг Apache и на основе имени с SSL для защиты передачи данных. Если по какой-либо причине у вас возникли какие-либо проблемы, сообщите нам об этом, используя форму комментариев ниже. Мы будем более чем рады помочь вам провести успешную настройку.

Читайте также

  1. Виртуальный хостинг на основе IP-адреса и имени Apache
  2. Создание виртуальных хостов Apache с параметрами включения/отключения Vhosts
  3. Мониторинг «Веб-сервера Apache» с помощью инструмента «Apache GUI»