Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Практикум по администрированию программного обеспечения. Лабораторный практикум

.pdf
Скачиваний:
0
Добавлен:
11.08.2026
Размер:
662 Кб
Скачать

Лабораторный практикум

Настройки модулей расположены в директории /etc/apache2/ mods-available. Для подключения или отключения модулей (настроек модулей) следует использовать соответствующие команды a2enmod или a2dismod. Пример подключения модуля:

sudo a2enmod <mod-name>.

Свои настройки следует сохранять в файлы, расположенные

вдиректории /etc/apache2/conf-available. Для подключения или отключения своих настроек следует использовать соответствующие команды a2enconf или a2disconf. Пример подключения файла со своими настройками:

sudo a2enconf <config-name>.

Настройки виртуальных хостов следует сохранять в файлы, расположенные в директории /etc/apache2/sites-available. Для подключения виртуальных хостов следует использовать соответствующие команды a2ensite или a2dissite. Пример подключения виртуального хоста:

sudo a2ensite <site-name>.

Кодировка по умолчанию. Для указания кодировки по умолчанию следует использовать директиву AddDefaultCharset в фай-

ле /etc/apache2/conf-available/charset.conf (или раскомментировать соответствующую строку):

AddDefaultCharset UTF-8.

Виртуальные хосты. Файлы настроек виртуальных хостов хранятся в /etc/apache2/sites-available/*.conf. По умолчанию в

Apache уже настроен один виртуальный хост. Его настройки лежат

вфайле 000-default.conf. Можно использовать этот виртуальный хост в качестве примера.

Пример настройки виртуального хоста:

<VirtualHost *:80>

#Имя хоста

ServerName host1.server1

#Корневая папка хоста

DocumentRoot /var/www/host1.server1 <Directory /var/www/host1.server1>

#Разрешение на перезапись всех директив при помощи

.htaccess AllowOverride All </Directory> </VirtualHost>

Назовите файл настройки именем вашего хоста host1.server1. conf и сохраните.

51

Практикум по администрированию программного обеспечения

После создания файла настроек допишите в /etc/hosts имя вашего хоста:

127.0.0.1 host1.server1

Для включения созданного виртуального хоста используется утилита a2ensite:

sudo a2ensite host1.server1

Отключается хост аналогично утилитой a2dissite: sudo a2dissite host1.server1

Модули mod_userdir. Модуль mod_userdir позволяет использовать директории, находящиеся в домашних директориях пользователей для хранения веб страниц. По умолчанию Apache ищет запрашиваемые страницы в директории ~/public_html

mkdir ~/public_html

Чтобы включить mod_userdir, выполните: sudo a2enmod userdir

и добавьте необходимого пользователя в группу www-data: sudo adduser $USER www-data

после чего перезагрузите Apache:

sudo service apache2 restart

Страницы будут доступны по адресу http://localhost/~username, где username – имя пользователя.

Настройка public_html подробно. CGI

Если необходимо запускать на сервере cgi-скрипты, то стоит подключить модуль cgi командой

sudo a2enmod cgi.

По умолчанию cgi-скрипты размещаются в директории /usr/lib/ cgi-bin, но можно разместить их где угодно, указав это в настройках своего виртуального хоста, либо глобально для всех хостов в фай-

ле /etc/apache2/conf-enabled/serve-cgi-bin.conf.

Если сервер работает во внешней сети, то в целях безопасности настоятельно рекомендуется размещать cgi-скрипты вне корневой директории виртуального хоста

Настройка HTTPS в Apache. Веб-сервер Apache полностью поддерживает работу по HTTPS. Чтобы активировать поддержку HTTPS на уже установленномApache, необходимо выполнить следующее.

1. Создать ключ и ssl-сертификат. Использование самоподписанных сертификатов хоть и защищает от пассивного прослушивания, тем не менее не гарантирует клиентам, что сервер является именно тем сервером, который им нужен. Преимуществом само-

52

Лабораторный практикум

подписанных сертификатов является их бесплатность. Сертификат, подписанный компанией-сертификатором (Certificate authority), стоит денег.

2.Для создания ключа и сертификата вводим команду: openssl req -new -x509 -days 30 -keyout server.key -out server.pem

3.На вопрос «Enter PEM pass phrase:» отвечаем паролем, подтверждаем и запоминаем.

4.На все последующие вопросы отвечаем произвольно, можно просто щелкать по Enter, соглашаясь с предложенными варианта-

ми, только на вопрос «Common Name (eg, YOUR name) []:» отве-

чаем именем сайта, для которого создаем сертификат, например www.example.com.

5.После ответа на все вопросы в директории должны появиться два новых файла – server.pem (ключ) и server.crt (сертификат).

6.Чтобы использовать сгенерированный ключ, нужно знать введённый пароль, иApache будет спрашивать его каждый раз при загрузке. Это не удобно. Поэтому следует снять пароль с ключа:

cp server.key{,.orig}

openssl rsa -in server.key.orig -out server.key rm server.key.orig

Скопируем их в /etc/ssl и назначим файлу ключа права чтения только администратору:

sudo cp server.pem /etc/ssl/certs/ sudo cp server.key /etc/ssl/private/

sudo chmod 0600 /etc/ssl/private/server.key

Настройка Apache. Для начала необходимо активировать mod_ssl:

sudo a2enmod ssl.

А затем включить настройки HTTPS сайта по умолчанию: sudo a2ensite default-ssl.

Теперь необходимо отредактировать файл с настройками HTTPS сайта по умолчанию, указав в нём пути к сертификатам.

Сам файл называется /etc/apache2/sites-enabled/default-ssl (или /etc/apache2/sites-enabled/default-ssl.conf).

В этом файле рекомендуется после директивы

SSLEngine on

добавить строчку

SSLProtocol all -SSLv2,

чтобы запретить использование устаревшего протокола SSLv2. Дальше необходимо отредактировать параметры, ответствен-

ные за сертификаты.

53

Практикум по администрированию программного обеспечения

#Публичный сертификат сервера

SSLCertificateFile /etc/ssl/certs/server.pem

#Приватный ключ сервера

SSLCertificateKeyFile /etc/ssl/private/server.key.

Осталось перезагрузить Apache:

sudo service apache2 restart.

И если все параметры указаны верно, сайты станут доступны

по HTTPS.

Протокол HTTPS работает по 443 порту, поэтому если сервер находится за шлюзом, то необходимо на нём пробросить данный порт.

Перенаправление HTTP запросов на HTTPS. Если нужно за-

претить использование HTTP, то самым разумным будет перенаправлять все HTTP запросы к страницам на их HTTPS-адрес. Сделаем это с помощью mod_alias. Если он не включён – включаем: sudo a2enmod alias

sudo service apache2 restart.

Затем изменяем файл /etc/apache2/sites-enabled/000-default,

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

Redirect / https://example.com/.

При этом все настройки директорий можно удалить, поскольку по HTTP на созданные сайты попасть невозможно.

Необходимо ещё раз перезапустить Apache и убедиться, что при заходе по HTTP происходит автоматическое перенаправление на HTTPS-страницу.

Возможные проблемы. Если при запуске появляется ошибка apache2: Could not determine the server’s fully qualified domain name, using 127.0.0.1 for ServerName,

стоит добавить в свой файл конфигурации строку

ServerName localhost.

Существует другая реализация WEB сервера – ngnix.

Nginx [engine x] – это HTTP-сервер и обратный прокси-сервер, почтовый прокси-сервер, а также TCP/UDP прокси-сервер общего назначения, изначально написанный Игорем Сысоевым. Уже длительное время он обслуживает серверы многих высоконагруженных российских сайтов, таких как Яндекс, Mail.Ru, ВКонтакте и Рамблер. Согласно статистике Netcraft nginx обслуживал или проксировал 27.83% самых нагруженных сайтов в ноябре 2016 года. Вот некоторые примеры успешного внедрения nginx (тексты на ан-

глийском языке): Netflix, Wordpress.com,FastMail.FM.

54

Лабораторный практикум

Исходные тексты и документация распространяются под BSD-подобной лицензией из 2 пунктов.

Коммерческая поддержка осуществляется компанией Nginx, Inc. У nginx есть один главный и несколько рабочих процессов.

Основная задача главного процесса – чтение и проверка конфигурации и управление рабочими процессами. Рабочие процессы выполняют фактическую обработку запросов. nginx использует модель, основанную на событиях, и зависящие от операционной системы механизмы для эффективного распределения запросов между рабочими процессами. Количество рабочих процессов задаётся в конфигурационном файле и может быть фиксированным для данной конфигурации или автоматически устанавливаться равным числу доступных процессорных ядер.

Как работают nginx и его модули, определяется в конфигурационном файле. По умолчанию, конфигурационный файл называется nginx.conf и расположен в каталоге

/usr/local/nginx/conf,/etc/nginx или /usr/local/etc/nginx.

Запуск, остановка, перезагрузка конфигурации. Чтобы за-

пустить nginx, нужно выполнить исполняемый файл. Когда nginx запущен, им можно управлять, вызывая исполняемый файл с параметром -s. Используйте следующий синтаксис:

nginx -s сигнал

Где сигнал может быть одним из нижеследующих: stop – быстрое завершение

quit – плавное завершение

reload – перезагрузка конфигурационного файла reopen – переоткрытие лог-файлов

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

nginx -s quit.

Команда должна быть выполнена под тем же пользователем, под которым был запущен nginx.

Изменения, сделанные в конфигурационном файле, не будут применены, пока команда перезагрузить конфигурацию не будет вручную отправлена nginx’у или он не будет перезапущен. Для перезагрузки конфигурации выполните:

nginx -s reload.

Получив сигнал, главный процесс проверяет правильность синтаксиса нового конфигурационного файла и пытается применить конфигурацию, содержащуюся в нём. Если это ему удаётся,

55

Практикум по администрированию программного обеспечения

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

Посылать сигналы процессам nginx можно также средствами Unix, такими как утилита kill. В этом случае сигнал отправляется напрямую процессу с данным ID. ID главного процесса nginx записывается по умолчанию в файл nginx.pid в каталоге /usr/local/nginx/ logs или /var/run. Например, если ID главного процесса равен 1628, для отправки сигнала QUIT, который приведёт к плавному завершению nginx, нужно выполнить:

kill -s QUIT 1628

Для просмотра списка всех запущенных процессов nginx может быть использована утилита ps, например, следующим образом:

ps -ax | grep nginx

Структура конфигурационного файла. nginx состоит из мо-

дулей, которые настраиваются директивами, указанными в конфигурационном файле. Директивы делятся на простые и блочные. Простая директива состоит из имени и параметров, разделённых пробелами, и оканчивается точкой с запятой (;). Блочная директива устроена так же, как и простая директива, но вместо точки с запятой после имени и параметров следует набор дополнительных инструкций, помещённых внутри фигурных скобок ({ и }). Если у блочной директивы внутри фигурных скобок можно задавать другие директивы, то она называется контекстом (примеры: events, http, server иlocation).

Директивы, помещённые в конфигурационном файле вне любого контекста, считаются находящимися в контексте main. Директивы events и http располагаются в контексте main, server – в http,

а location – в server.

Часть строки после символа # считается комментарием.

Раздача статического содержимого. Одна из важных задач конфигурации nginx – раздача файлов, таких как изображения или статические HTML-страницы. Рассмотрим пример, в котором в зависимости от запроса файлы будут раздаваться из разных локальных каталогов: /data/www, который содержит HTML-файлы, и /data/images, содержащий файлы с изображениями. Для этого

56

Лабораторный практикум

потребуется отредактировать конфигурационный файл и настроить блок server внутри блока http с двумя блоками location.

Во-первых, создайте каталог /data/www и положите в него файл index.html с любым текстовым содержанием, а также создайте каталог /data/images и положите в него несколько файлов с изображениями.

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

http { server {

}

}

Вобщем случае конфигурационный файл может содержать несколько блоков server, различаемыхпо портам, на которых они слушают, и по имени сервера. Определив, какой server будет обрабатывать запрос, nginx сравнивает URI, указанный в заголовке запроса, с параметрами директив location, определённых внутри блока server.

Вблок server добавьте блок location следующего вида:

location / { root /data/www;

}

Этот блок location задаёт “/” в качестве префикса, который сравнивается с URI из запроса. Для подходящих запросов добавлением URI к пути, указанному в директиве root, то есть, в данном случае, к /data/www, получается путь к запрашиваемому файлу в локальной файловой системе. Если есть совпадение с несколькими блоками location, nginx выбирает блок с самым длинным префиксом. В блоке location выше указан самый короткий префикс, длины один, и поэтому этот блок будет использован, только если не будет совпадения ни с одним из остальных блоков location.

Далее, добавьте второй блок location: location /images/ {

root /data;

}

Он будет давать совпадение с запросами, начинающимися с /images/ (location / для них тоже подходит, но указанный там префикс короче).

57

Практикум по администрированию программного обеспечения

Итоговая конфигурация блока server должна выглядеть следующим образом:

server { location / { root /data/www;

}

location /images/ { root /data;

}

}

Это уже работающая конфигурация сервера, слушающего на стандартном порту 80 и доступного на локальном компьютере по адресу http://localhost/. В ответ на запросы, URI которых начинаются с /images/, сервер будет отправлять файлы из каталога /data/images.

Например, на запрос http://localhost/images/example.png nginx от-

правит в ответ файл /data/images/example.png. Если же этот файл не существует, nginx отправит ответ, указывающий на ошибку 404. Запросы, URI которых не начинаются на /images/, будут отображены на каталог /data/www. Например, в результате запроса http:// localhost/some/example.html в ответ будет отправлен файл /data/ www/some/example.html.

Чтобы применить новую конфигурацию, запустите nginx, если он ещё не запущен, или отправьте сигнал reload главному процессу nginx, выполнив:

nginx -s reload

В случае если что-то работает не как ожидалось, можно попытаться выяснить причину с помощью файлов access.log и error.log

из каталога /usr/local/nginx/logs или/var/log/nginx.

Настройка простого прокси-сервера

Одним из частых применений nginx является использование его в качестве прокси-сервера, то есть сервера, который принимает запросы, перенаправляет их на проксируемые сервера, получает ответы от них и отправляет их клиенту.

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

Во-первых, создайте проксируемый сервер, добавив ещё один блок server в конфигурационный файл nginx со следующим содержимым:

58

Лабораторный практикум

server { listen 8080;

root /data/up1;

location / {

}

}

Это будет простой сервер, слушающий на порту 8080 (ранее директива listen не указывалась, потому что использовался стандартныйпорт80)иотображающийвсезапросынакаталог/data/up1

влокальной файловой системе. Создайте этот каталог и положите

внего файл index.html. Обратите внимание, что директива root помещена в контекст server. Такая директива root будет использована, когда директива location, выбранная для выполнения запроса, не содержит собственной директивы root.

Далее, используйте конфигурацию сервера из предыдущего раздела и видоизмените её, превратив в конфигурацию прок- си-сервера. В первый блок location добавьте директиву proxy_pass, указав протокол, имя и порт проксируемого сервера в качестве параметра (в нашем случае это http://localhost:8080):

server { location / {

proxy_pass http://localhost:8080;

}

location /images/ { root /data;

}

}

Мы изменим второй блок location, который на данный момент отображает запросы с префиксом /images/ на файлы из каталога /data/images так, чтобы он подходил для запросов изображений с типичными расширениями файлов. Изменённый блок location выглядит следующим образом:

location ~ \.(gif|jpg|png)$ { root /data/images;

}

Параметром является регулярное выражение, дающее совпадение со всеми URI, оканчивающимися на .gif, .jpg или .png. Регулярному выражению должен предшествовать символ ~. Соответствующие запросы будут отображены на каталог /data/images.

59

Практикум по администрированию программного обеспечения

Когда nginx выбирает блок location, который будет обслуживать запрос, то вначале он проверяет директивы location, задающие префиксы, запоминая location с самым длинным подходящим префиксом, а затем проверяет регулярные выражения. Если есть совпадение с регулярным выражением, nginx выбирает соответствующий location, в противном случае берётся запомненный ра-

нее location.

Итоговая конфигурация прокси-сервера выглядит следующим образом:

server { location / {

proxy_pass http://localhost:8080/;

}

location ~ \.(gif|jpg|png)$ { root /data/images;

}

}

Этот сервер будет фильтровать запросы, оканчивающиеся на

.gif, .jpg или .png, и отображать их на каталог /data/images (добавлением URI к параметру директивы root) и перенаправлять все остальные запросы на проксируемый сервер, сконфигурированный выше.

Чтобы применить новую конфигурацию, отправьте сигнал reload nginx’у, как описывалось в предыдущих разделах.

Существует множество других директив для дальнейшей настройки прокси-соединения.

Настройка проксирования FastCGI. nginx можно использо-

вать для перенаправления запросов на FastCGI-серверы. На них могут исполняться приложения, созданные с использованием разнообразных фреймворков и языков программирования, например, PHP.

Базовая конфигурация nginx для работы с проксируемым FastCGI-сервером включает в себя использование директивы fastcgi_pass вместо директивы proxy_pass, и директив fastcgi_ param для настройки параметров, передаваемых FastCGI-сер- веру. Представьте, что FastCGI-сервер доступен по адресу localhost:9000. Взяв за основу конфигурацию прокси-сервера из предыдущего раздела, замените директиву proxy_pass на директиву fastcgi_pass и измените параметр на localhost:9000. В PHP параметр SCRIPT_FILENAME используется для определения имени

60

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