Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
v0_Методичка. ЛР. Web программирование.docx
Скачиваний:
7
Добавлен:
01.07.2025
Размер:
6 Мб
Скачать
☆

Лабораторная работа 7 Расширенная настройка web-сервера Apache.

Цель

Изучить дополнительные возможности настройки web-сервера Apache на платформе FreeBSD.

Теоретические сведения

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

Файл htaccess является подобием httpd.conf с той разницей, что действует только на каталог, в котором располагается, и на его дочерние каталоги. Возможность использования .htaccess присутствует в любом каталоге пользователя.

Файл .htaccess может быть размещен в любом каталоге. Директивы этого файла действует на все файлы в текущем каталоге и во всех его подкаталогах (если эти директивы не переопределены директивами нижележащих файлов .htaccess).

Установка пароля на каталоги

Команда htpasswd

Если создаем первого пользователя и соответственно еще не имеем файла с пользователями и паролями, то используем ключ -с

htpasswd -c passwd test

Пароль храниться в зашифрованном виде.

Для добавления нового пользователя используем команду

htpasswd passwd test1

Простое перенаправление. Инструкция Redirect.

Redirect [status] URL_LOCAL URL_REDIRECT

status – необязательное поле, определяет код возврата

permanent (301 – документ перемещен постоянно)

temp (302 – документ перемещен временно)

seeother (303 – смотрите другой)

gone (410 – убран)

URL_LOCAL – локальная часть URL запрашиваемого документа

URL_REDIRECT – URL куда должен быть выполнен редирект

Сложное перенаправление. Модуль mod_rewrite.

Модуль mod_rewrite – это мощнейшее, интеллектуальное средство преобразования URL-адресов.

Данный модуль представляет собой основанный на правилах механизм (синтаксический анализатор с применением регулярных выражений), выполняющий URL преобразования на лету. Модуль поддерживает неограниченное количество правил и связанных с каждым правилом условий. URL преобразования могут использовать разные источники данных, например переменные сервера, переменные окружения, HTTP заголовки.

Директива RewriteCond – определяет условие, при котором происходит преобразование. RewriteCond определяет условия для какого-либо правила.

Директива RewriteRule располагаются после одной или несколько директив RewriteCond. Правило преобразования используется только тогда, когда URI соответствует условиям директивы RewriteCond и также условиям дополнительных директив RewriteCond.

Директива RewriteEngine включает или выключает работу механизма преобразования. Если она установлена в положение off этот модуль не работает. Необходимо включать механизм преобразования (RewriteEngine on) для каждого виртуального хоста, если необходимо использовать модуль mod_rewrite.

Выполнение

  1. В файле httpd.conf в секции <Directory "/usr/local/www/apache24/data"> закомментируем инструкцию AllowOverride None и добавим инструкцию AllowOverride All

  2. В каталоге /usr/local/www/apache24/data создайте каталог test и в нем файл index.html следующего содержания. Можете воспользоваться любым FTP клиентом.

<!DOCTYPE HTML>

<html>

<head>

<meta charset="koi8-r">

<title>Сайт супер фирмы</title>

</head>

<body>

<p>Сайт СУПЕР ФИРМЫ</p>

</body>

</html>

  1. В браузере открываем сайт www.server_freebsd.mycompany.ru/test, смотрим что получилось.

  2. Переименуйте файл index.html в каталоге test в index.htm.

  3. В браузере опять пытаемся открыть сайт www.server_freebsd.mycompany.ru/test. Получаем содержание каталога.

  4. В каталоге test создаем файл .htaccess и добавляем в него строчку

Options All -Indexes

  1. Выполните рестарт web-сервера.

  2. В браузере опять пытаемся открыть сайт www.server_freebsd.mycompany.ru/test Получаем ошибку 403 – Доступ запрещен. Т.е. мы запретили возможность просмотра содержимого каталога test.

  3. В каталоге test создаем каталог txt и в нем создаем пару файлов с расширением txt и произвольного содержания.

  4. Пробуем в браузере попасть в каталог txt нашего сайта

www.server_freebsd.mycompany.ru\test\txt

  1. Не получается – ошибка 403.

  2. В каталоге txt создаем новый файл .htaccess со следующей строчкой

Options Indexes

  1. Выполните рестарт web-сервера.

  2. Повторяем попытку и получаем разрешение на просмотр каталога txt

  3. Организуем доступ в каталог txt только авторизованным пользователям.

  4. Создадим пользователя test и пароль для него, все данные будут храниться в файле /usr/local/www/apache24/passwd в зашифрованном виде.

htpasswd –c /usr/local/www/apache24/passwd test

  1. Правим файл .htaccess в каталоге txt

AuthName “Protected area, need authorization”

AuthType Basic

AuthUserFile /usr/local/www/apache22/passwd

require valid-user

  1. Выполните рестарт web-сервера.

  2. Пробуем в браузере попасть в каталог txt нашего сайта. Получаем запрос на ввод имени и пароля. Если авторизация прошла успешно, то получаем доступ.

www.server_freebsd.mycompany.ru\test\txt

  1. Поэкспериментируем с директивами простого перенаправления (redirect).

  2. В файл .htaccess в каталоге test нашего сайта добавим следующую строчку

Redirect /test/freebsd http://freebsd.org

  1. В браузере в строке URL наберем следующий путь

www.server_freebsd.mycompany.ru\test\freebsd

  1. Убеждаемся, что произошел переход на сайт freebsd.org (не забываем перезапустить Apache, т.к. файлы .htaccess читаются один раз при запуске и изменения в них не подхватываются «на горячую»).

  2. Для организации более изощренного перенаправления будем использовать модуль mod_rewrite, который входит в состав web-сервера Apache и является мощным средством преобразования URL адресов. В файле httpd.conf включаем использование модуля, снимаем комментарий со строки

LoadModule rewrite_module libexec/apache24/mod_rewrite.so

  1. Для получения отладочной информации и протоколирования работы модуля mod_rewrite (запись ведется в стандартный файл ошибок httpd – httpd-error.log) достаточно в файле httpd.conf добавить строку

LogLevel warn mod_rewrite.c:trace4

  1. Выполните рестарт web-сервера.

  2. Используем модуль для перенаправления URL www.server_freebsd.mycompany.ru/test/old в каталог new на нашем сайте.

  3. Создаем в каталоге test каталог new и размещаем в нем index.html следующего содержания

<html>

<head>

<meta charset="koi8-r">

<title>Перешли к новым файлам из OLD</title>

</head>

<body>

<h1>Перешли к новым файлам из OLD</h1>

</body>

</html>

  1. В каталоге new создаем файл .htaccess следующего содержания

Options +Indexes +FollowSymLinks

DirectoryIndex index.html

  1. Проверяем работоспособность – в браузере открываем следующий URL

http:// www.server_freebsd.mycompany.ru/test/new

  1. Должны получить созданную выше index.html.

  2. Выполним настройку редиректа URL http:// www.server_freebsd.mycompany.ru/test/old в каталог new. Правим файл .htaccess в каталоге test, добавляем следующие строчки

RewriteEngine on

RewriteBase /

RewriteCond %{REQUEST_URI} test/old

RewriteRule (.*) /test/new/

  1. Проверяем работу перенаправления, в браузере открываем URL www.server_freebsd.mycompany.ru/test/old. Должна открыться страничка index.html, физически размещенная в каталоге new нашего сайта.

  2. Проанализируйте протокол работы модуля перенаправления mod_rewrite. Помните, что должна быть включена соответствующая опция в файле httpd.conf.

  3. Поэкспериментируем с перенаправлением использую значение серверной переменной USER-AGENT.

  4. Будем использовать браузер Chrome и следующие расширения для него: HTTP Header – для просмотра заголовков; User-Agent Switcher for Chrome – для изменение идентификации браузера при обращении к web-серверу.

  5. Создадим структуру каталогов для эксперимента. В каталоге data создаем каталоги doc, android и no_android. При попытке открыть в браузере URL http:// www.server_freebsd.mycompany.ru/doc необходимо будет выполнить перенаправление в зависимости от содержания поля USER-AGENT:

  • содержит подстроку «Android» – открываем index.html из каталога android

  • не содержит подстроку «Android» – открываем index.html из каталога no_android

  1. В каталоге doc создаем файл .htaccess, где определяем правила перенаправления, следующего содержания

Options +Indexes +FollowSymLinks

RewriteEngine on

RewriteBase /

RewriteCond %{HTTP_USER_AGENT} ^.*Android.*

RewriteRule ^(.*)$ /android/ [L]

RewriteRule ^(.*)$ /no_android/ [L]

  1. В каталоге android создаем index.html следующего содержания

<html>

<head>

<meta charset="koi8-r">

<title>USER-AGENT содержит Android</title>

</head>

<body>

<h1>USER-AGENT содержит Android</h1>

</body>

</html>

  1. В каталоге no_android создаем index.html следующего содержания

<html>

<head>

<meta charset="koi8-r">

<title>USER-AGENT НЕ СОДЕРЖИТ Android</title>

</head>

<body>

<h1>USER-AGENT НЕ СОДЕРЖИТ Android</h1>

</body>

</html>

  1. В каждом каталоге android и no_android создаем файл .htaccess следующего содержания

Options +Indexes +FollowSymLinks

DirectoryIndex index.html

  1. Выполняем проверку настроек. В браузере Chrome открываем URL http:// www.server_freebsd.mycompany.ru/doc. И смотрим заголовки HTTP-запроса.

  1. Изменяем с помощью расширения User-Agent Switcher for Chrome идентификацию браузера

  1. В браузере Chrome открываем URL http://www.server_freebsd.mycompany.ru/doc. И смотрим заголовки HTTP-запроса.

  1. Пробуем заменить сообщения об ошибках. В каталоге data создаем каталог err, в котором создаем новый файл с именем 404.html и следующим содержанием

<html>

<head>

<meta charset=”koi8-r”>

<title>Error 404 </title>

</head>

<h2 style="text-align: center";>

404

<span style="color: #ff0000";><strong>Файл не найден</strong></span>

</h2>

<h1 style="text-align: center";>

<span style="color: #0000ff";>

К сожалению, здесь нет того содержания, которое Вы искали.

</span>

<span style="color: #0000ff";>

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

</span>

</h1>

<h1 style="text-align: center";>

<span style="color: #ff0000";>

<a href=http://testsite target="_blank">

<span style="color: #ff0000";>

Наш сайт

</span>

</a>

</span>

</h1>

</html>

  1. В файл .htaccess, который расположен в каталоге data добавляем следующую строчку

ErrorDocument 404 /err/404.html

  1. Пробуем открыть заведомо несуществующую страницу нашего сайта http:// www.server_freebsd.mycompany.ru/rr.html. Если все сделали правильно, то должны получить следующее сообщение об ошибке.

  1. И напоследок, настроим возможность подключения к сайту с помощью протокола HTTPS и использованием SSL-сертификатов.

  2. Прежде всего, необходимо сгенерировать корневой сертификат организации, которым будем подписывать сертификат, предназначенный для сайта www.server_freebsd.mycompany.ru. Воспользуемся программой openssl.

  3. Все сертификаты будем сохранять в каталоге /etc/ssl, сделаем ее текущей

cd /etc/ssl

  1. Создаем ключ для корневого сертификата

openssl genrsa -out rootCA.key 2048

  1. Используя сгенерированный ключ, создаем корневой сертификат сроком действия 365 дней. На вопросы отвечаем примерно как на картинке ниже.

openssl req -x509 -new -key rootCA.key -days 365 -out rootCA.crt

  1. Теперь можно создавать сертификат для нашего сайта и подписывать его корневым сертификатом нашей организации.

  2. Создаем ключ

openssl genrsa -out www.server_freebsd.mycompany.ru.key 2048

  1. Создаем запрос на сертификат. При ответе на вопросы обратите внимание на Common name – оно должно совпадать с именем сайта (www.server_freebsd.mycompany.ru) и пароль должен превышать 10 символов.

openssl req -new -key www.server_freebsd.mycompany.ru.key -out www.server_freebsd.mycompany.ru.csr

  1. Подписываем запрос на сертификат корневым сертификатом нашей организации (rootCA.crt), который сгенерировали ранее. Срок действия указываем 365 дней.

openssl x509 -req -in www.server_freebsd.mycompany.ru.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out www.server_freebsd.mycompany.ru.crt -days 365

  1. Выполним настройку web-сервера для обеспечения поддержки SSL-сертификатов.

  2. Включаем поддержку SSL web-сервера Apache – в файл /etc/rc.conf добавляем следующую строку

apache24ssl_enable=”YES”

  1. Настройки для работы с SSL Apache будет «брать» из файла httpd-ssl.conf, который находится по умолчанию в каталоге /usr/local/etc/apache24/extra. В файле httpd.conf добавим строку (в общем случае путь к конфигурационному файлу может быть произвольным, мы оставляем по умолчанию)

Include etc/apache24/extra/httpd-ssl.conf

  1. Раскомментируем строку в httpd.conf

LoadModule ssl_module libexec/apache24/mod_ssl.so

  1. Редактируем файл /usr/local/etc/apache24/extra/httpd-ssl.conf (находим строки, заменяем их или добавляем несуществующие)

<VirtualHost *:443>

DocumentRoot “/usr/local/www/apache24/data”

ServerName www.server_freebsd.mycompany.ru

ErrorLog /var/log/httpd-error.log

TransferLog /var/log/httpd-access.log

SSLCertificateFile “/etc/ssl/www.server_freebsd.mycompany.ru.crt”

SSLCertificateKeyFile “/etc/ssl/www.server_freebsd.mycompany.ru.key”

SSLCertificateChainFile “/etc/ssl/www.server_freebsd.mycompany.ru.crt”

</VirtualHost>

  1. Выполняем команду

apachectl graceful

  1. Возможно будет ругаться, тогда раскомментируем строки

LoadModule cache_socache_module libexec/apache24/mod_cache_socache.so

LoadModule cache_module libexec/apache24/mod_cache.so

LoadModule socache_shmcb_module libexec/apache24/mod_socache_shmcb.so

  1. Если ошибок не обнаружено, то проверяем работоспособность нашего сайта по протоколу HTTPS. В браузере открываем URL

https://www.server_freebsd.mycompany.ru

  1. Скорее всего, Вы получите следующее сообщение об ошибки

  1. Браузер предупреждает, что сертификат подписан неизвестным корневым сертификатом. Тем не менее, мы продолжаем на свой страх и риск и получаем следующий результат

  1. Для исправления ситуации выполним импорт корневого сертификата, которым мы и подписывали сертификат для сайта в локальное хранилище корневых сертификатов. Любым удобным для Вас способом скопируйте файл /etc/ssl/rootCA.crt на локальный компьютер (базовая ОС). Проще всего забрать по FTP.

  2. Посмотрим сертификаты, которые присутствуют на нашем локальном компьютере (базовая ОС). Для этого воспользуемся соответствующей оснасткой консоли управления MMC.

  3. Запускаем консоль управления из командной строки cmd.

mmc

  1. Выполним добавление нужной нам оснастки.

Файл –> Добавить или удалить оснастку

  1. Из списка доступных оснасток выбираем «Сертификаты» и жмем кнопку «Добавить».

  2. В открывшемся окне выбираем опцию «учетная запись компьютера», жмем «Далее» и «Готово»

  1. После этого оснастка появится в списке «Выбранные оснастки…», для завершения жмем «ОК»

  2. Выбираем узел «Доверенные корневые центры сертификации», в него и будем выполнять импорт корневого сертификата rootCA.crt

  1. Отвечает на простые вопросы мастера импорта

  1. В итоге получаем корневой сертификат в нашем локальном хранилище.

  1. В браузере открываем URL https://www.server_freebsd.mycompany.ru и видим, что сертификат опознан, и обмен данными между браузером и web-сервером выполняется в рамках защищенного соединения.

На этом пока все, какие мы молодцы.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]