Шпаргалка по Apache

Содержание скрыть

В этой публикации будет собрана небольшая шпаргалка по Apache – наиболее распространенные операции в процессе установки и сопровождения этого веб сервера. Тем, кто только начинает знакомство с веб сервисом Apache эта шпаргалка может быть полезна.

Установка

Самый простой вариант установки – это установка пакета из репозитория соответствующего дистрибутива.

Ubuntu Server 22.04

Команда для установки сервера Apache (пакет apache2) в Ubuntu Server 22.04:

sudo apt install apache2

Rocky Linux 9.3

Команда для установки сервервера Apache (пакет httpd) в Rocky Linux 9.3:

sudo dnf install httpd

Дополнительно после установки необходимо открыть, как минимум, следующие порты – 80 и 443 TCP:

sudo firewall-cmd --add-service=http --add-service=https --permanent
sudo firewall-cmd --reload

Настройка автоматического запуска

После установки сервер Apache уже настроен на автоматический запуск. Если по каким-то причинам автоматический запуск был отключен, но вы всегда можете его включить.

Включение автоматического запуска в Ubuntu Server 22.04:

sudo systemctl enable apache2

Включение автоматического запуска в Rocky Linux 9.3:

sudo systemctl enable httpd

Управление сервисом Apache

Просмотр статуса сервиса

Команда для просмотра статуса сервиса в Ubuntu Server 22.04:

sudo systemctl status apache2

Команда для просмотра статуса сервиса в Rocky Linux 9.3:

sudo systemctl status httpd

Перезапуск сервиса

Команда для перезапуска сервиса в Ubuntu Server 22.04:

sudo systemctl restart apache2

Команда для перезапуска сервиса в Rocky Linux 9.3:

sudo systemctl restart httpd

Перечитать конфигурационный файл сервиса

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

Команда для актуализации конфигурационного файла в Ubuntu Server 22.04:

sudo systemctl reload apache2

Команда для актуализации конфигурационного файла в Rocky Linux 9.3:

sudo systemctl reload httpd

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

Пример базового конфигурационного файла для HTTP узла:

<VirtualHost *:80>
        ServerAdmin romanr@itproblog.ru
        DocumentRoot /var/www/html

        ErrorLog ${APACHE_LOG_DIR}/error_default.log
        CustomLog ${APACHE_LOG_DIR}/access_default.log combined
</VirtualHost>

Основной параметр в этом конфигурационном файле – это директира DocumentRoot – она определяет, где именно находится все файлы для веб сайта. Для Rocky Linux 9.3 замените макрос ${APACHE_LOG_DIR} на адрес директории с журналами. Например, /var/log/httpd.

Расположение файлов с определениями для сайтов в Ubuntu Server 22.04

Для Ubuntu Server 22.04 конфигурационные файлы для веб сайтов расположены по следующему пути:

/etc/apache2/sites-available/
ls -l /etc/apache2/sites-available/

После добавления конфигурационного файла с описанием определения сайта в эту директорию необходимо указать серверу о том, что сайт необходимо включить:

sudo a2ensite newsite

Хотя на самом деле создается символическая ссылка для конфигурационного файла в директории /etc/apache2/sites-available/ на файл с аналогичным названием в директории /etc/apache2/sites-enabled/:

ls -l /etc/apache2/sites-enabled/

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

Расположение файлов с определениями для сайтов в Rocky Linux 9.3

Определения сайтов в Rocky Linux 9.3 располагаются либо непосредственно в конфигурационном файла httpd.conf:

/etc/httpd/conf/httpd.conf

Рекомендуется хранить определения для новых сайтов в отдельной директории для включения дополнительных параметров и определения сайтов:

/etc/httpd/conf.d/

Например:

ls -l /etc/httpd/conf.d/newsite.conf

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

Настройка SSL

Пример конфигурационного файла для сайта с поддержкой HTTPS:

<VirtualHost *:443>
    DocumentRoot /var/www/html
    ServerName newsite.itproblog.ru
    SSLEngine on
    SSLCertificateFile /etc/ssl/crt/bazov_cert.crt
    SSLCertificateKeyFile /etc/ssl/crt/private.key
    SSLCertificateChainFile /etc/ssl/crt/promejut_cert.crt
</VirtualHost>

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

ДирективаОписание
DocumentRootОпределяет директорию на сервере Apache, в которой расположены все файлы для сайта.
ServerNameИмя, которое сервер будет прослушивать для клиентских подключений.
SSLEngineВключает поддержку HTTPS
SSLCertificateFileПуть до файла с открытым ключом (сертификатом) на сервере
SSLCertificateKeyFileПуть до файла с закрытым ключом на сервере
SSLCertificateChainFileПуть до файла с цепочкой сертификатов корневых центров (при наличии). Опциональная директива.

После добавления параметров в конфигурацию не забывайте перечитать файл или перезапустить сервис Apache.

Перенаправление с HTTP на HTTPS

Пример для всего редиректа всего HTTP трафика на HTTPS:

<VirtualHost *:80>
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

Пример для всего редиректа HTTP трафика на HTTPS только для определенного имени:

<VirtualHost *:80>
    ServerName site.itproblog.ru
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

Использование нестандартного порта

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

Ubuntu Server 22.04

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

1. Создать файл с определением сайта в директории /etc/apache2/sites-available. Например:

sudo nano /etc/apache2/sites-available/newsite.conf
<VirtualHost *:81>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html2

        ErrorLog ${APACHE_LOG_DIR}/error_new.log
        CustomLog ${APACHE_LOG_DIR}/access_new.log combined
</VirtualHost>

2. Добавить сайт в список активных сайтов:

sudo a2ensite newsite

3. В конфигурационном файле ports.conf добавить еще один прослушиваемый порт:

sudo nano /etc/apache2/ports.conf
Listen 81

4. Перечитать конфигурационные файлы на сервере:

sudo systemctl reload apache2

Rocky Linux 9.3

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

1. Создать файл с определением сайта в директории /etc/httpd/conf.d. Например:

sudo nano /etc/httpd/conf.d/newsite.conf
<VirtualHost *:81>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html2

        ErrorLog ${APACHE_LOG_DIR}/error_new.log
        CustomLog ${APACHE_LOG_DIR}/access_new.log combined
</VirtualHost>

2. В конфигурационном файле сервера Apache добавить еще один прослушиваемый порт.

sudo nano /etc/httpd/conf/httpd.conf 
Listen 81

3. Перечитать конфигурационные файлы на сервере:

sudo systemctl reload httpd

Просмотр списка модулей

Просмотр списка модулей в Ubuntu Server 22.04:

sudo apache2ctl -M

В Rocky Linux 9.3 список модулей можно посмотреть следующей командой:

sudo httpd -M

Производительность сервера Apache

Ниже я приведу некоторый список рекомендаций по оптимизации настроек веб сервера Apache, а также советы и рекомендации по настройке.

Определение количества необходимой оперативной памяти

Сначала нужно понять – сколько памяти потребляет один процесс сервера Apache (для Rocky Linux имя процесса будет httpd):

ps -aux | grep apache2

т.е. среднее потребление процесса Apache – около 5 МБ. Скажем, ожидается порядка 200 клиентских подключений. Соответственно, серверу будет необходимо около 1 ГБ оперативной памяти только для веб сервера Apache. Однако, стоит учитывать, что, например, при изменении характера нагрузки на сервер потребление памяти процессом Apache может измениться.

Еще я находил команду для расчета среднего количества оперативной памяти, которую потребляют процессы сервера Apache.

Синтетический тест произвоительности

У Apache есть своя утилита для проведения синтетического тестирования – ab. У неё есть свои достоинства и недостатки. Да, она не подходит для сложных сценариев, но для простых статических тестов её можно использовать.

Пример использования утилиты:

ab -n 1000 -c 10 http://10.10.10.65/index.html
root@ap01:/home/roman# ab -n 1000 -c 10 http://10.10.10.65/index.html
This is ApacheBench, Version 2.3 <$Revision: 1879490 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 10.10.10.65 (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests


Server Software:        Apache/2.4.57
Server Hostname:        10.10.10.65
Server Port:            80

Document Path:          /index.html
Document Length:        196 bytes

Concurrency Level:      10
Time taken for tests:   0.219 seconds
Complete requests:      1000
Failed requests:        0
Non-2xx responses:      1000
Total transferred:      381000 bytes
HTML transferred:       196000 bytes
Requests per second:    4564.31 [#/sec] (mean)
Time per request:       2.191 [ms] (mean)
Time per request:       0.219 [ms] (mean, across all concurrent requests)
Transfer rate:          1698.25 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   0.2      1       2
Processing:     1    1   0.4      1       4
Waiting:        1    1   0.3      1       4
Total:          1    2   0.5      2       5

Percentage of the requests served within a certain time (ms)
  50%      2
  66%      2
  75%      2
  80%      3
  90%      3
  95%      3
  98%      4
  99%      4
 100%      5 (longest request)

В примере выше отправляет 1000 запросов на сервер 10.10.10.65. Одновременно используется 10 потоков. По результатам видно, что общее время выполнения сценария заняло 0,219 секунд. Средняя производительность сервера составила 4564 запроса в секунду. 99% всех запросов обработались за 4 миллисекунды.

Включение TCP KeepAlive

Включение TCP KeepAlive (если это возможно) позволяет повысить производительность вашего веб сервера, т.к. существующая TCP сессия может быть использована для новых запросов. Для включения необходимо указать следующие параметры в конфигурации веб сервера:

KeepAlive On
MaxKeepAliveRequests 0
KeepAliveTimeout 15

Директива KeepAlive включает поддержку TCP KeepAlive. Параметр MaxKeepAliveRequests определяет сколько запросов разрешается обрабатывать через уже установленную сессию. Значение 0 указывает на то, что ограничений на количество запросов нет. Директива KeepAliveTimeout указывает количество секунд, после истечения которых неактивное соединения завершается.

Включение страницы с отображение статуса сервера

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

<Location /server-status>
SetHandler server-status
Require local
Require ip 10.10.10
</Location>
ExtendedStatus On

В целях безопасности руземнее всего ограничить подключение к статистике работы сервера. В примере выше доступ ограничен для локальных подключений с самого сервера и для клиентов подсети 10.10.10.0/24.

Пример страницы со статусом работы сервера:

Включение статистики необходимо, например, при настройке мониторинга сервера Apache через Zabbix.

Отключение разрешения DNS имени для клиентских подключений

Разрешение доменных имен клиентских подключений может очень сильно тормозить работу веб сервера. Лучше в явном виде отключить опцию разрешения доменных имен для клиентских подключений:

HostNameLookups Off

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

Оптимазация создания процессов

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

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

Значения для MinSpareServers и MaxSpareServers необходимо подбирать для каждого сервера индивидуально – в зависимости от текущей нагрузки на севрвер.

Также важен параметр ServerLimit (в более старых версиях – MaxClients). Он указывает максимальное количество подключений, которые сервер может принять. Если фактических подключений больше, то сервер не сможет принять лишние подключения.

Параметры выше необходимо указывать в следующем конфигурационном файле для Ubuntu Server 22.04:

/etc/apache2/apache2.conf

Для Rocky Linux 9.3 конфигурационный файл расположен по следующему пути:

/etc/httpd/conf/httpd.conf

Пример конфигурации:

ServerLimit 150
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 150
MaxConnectionsPerChild 0

Назначение каждого из параметров я привел в таблице ниже.

ПараметрНазначение
ServerLimitМаксимальное количество обслуживаемых процессов
StartServersКоличество процессов, которые создаются при запуске сервера
MinSpareServersМинимальное количество готовых процессов, ожидающих клиентские подключения
MaxSpareServersМаксимальное количество готовых процессов, ожидающих клиентские подключения
MaxRequestWorkersМаксимальное количество процессов, которые сервер может обслуживать одновременно. При увеличении этого параметра необходимо эквивалентно увеличить значение параметра ServerLimit
MaxConnectionsPerChildМаксимальное количество соединений, которое может обработать дочерний процесс сервера Apache

Выявление и устранение ошибок

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

Просмотр журналов

Самый первый шаг – это просмотр журналов.

Как правило, в Ubuntu Server 22.04 журналы расположены по следующему пути:

/var/log/apache2/

Стандартное расположение журналов в Rocky Linux 9.3 следующее:

/var/log/httpd/

Расположение журналов может отличаться – в зависимости от настроек виртуального хоста.

Также сообщения сервера Apache можно посмотреть через journalctl. Пример для Ubuntu Server 22.04:

sudo journalctl -u apache2

Пример для Rocky Linux 9.3:

sudo journalctl -u httpd

Анализ конфигурационных файлов

Возможные причины ошибок – ошибки в конфигурационных файлах и файлах .htaccess. О чем, скорее всего, сервер Apache напишет в журналах.

Напомню расположение основных конфигурационных файлов на сервере Ubuntu Server 22.04:

/etc/apache2/apache2.conf
/etc/apache2/sites-enabled/

Расположение основных конфигурационных файлов на сервере Rocky Linux 9.3:

/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *