Управление службой Apache
Для управления запуском и остановкой сервиса Apache можно использовать «ApacheMonitor». Откройте директорию веб-сервера bin («C:\Apache24\bin») и запустите файл: ApacheMonitor.exe. В системном трее появится значок Apache, с помощью которого можно быстро запускать/останавливать службу Apache.
А также, так как сервис Apache устанавливается как служба, после его установки, управлять его запуском/остановкой можно в окне списка служб («Пуск» → пункт «Панель управления» → «Администрирование» → «Службы»)
При установки Apache, служба, по умолчанию получает имя «Apache» или «Apache24». Если, в силу каких либо причин, имя службы нас не устраивает, есть возможность задать собственное имя, используя в командной строке параметр «-n» c указанием имени службы через пробел. (Если в имени службы содержится пробел необходимо обернуть его в кавычки, т. е. «name service»). Рассмотрим дополнительно команды для управления сервисом Apache:
устанавливаем службу
C:\Apache24\bin\httpd.exe -k install или C:\Apache24\bin\httpd.exe -k install -n name_service C:\Apache24\bin\httpd.exe -k install -n "name service"
запускаем службу
C:\Apache24\bin\httpd.exe -k start или C:\Apache24\bin\httpd.exe -k start -n name_service C:\Apache24\bin\httpd.exe -k start -n "name service"
останавливаем службу
C:\Apache24\bin\httpd.exe -k stop или C:\Apache24\bin\httpd.exe -k stop -n name_service C:\Apache24\bin\httpd.exe -k stop -n "name service"
удаляем службу
C:\Apache24\bin\httpd.exe -k uninstall или C:\Apache24\bin\httpd.exe -k uninstall -n name_service C:\Apache24\bin\httpd.exe -k uninstall -n "name service"
получаем информации о версии службы
C:\Apache24\bin\httpd.exe -V
получаем конфигурацию службы
C:\Apache24\bin\httpd.exe -k config или C:\Apache24\bin\httpd.exe -k config -n name_service C:\Apache24\bin\httpd.exe -k config -n "name service"
Данная команда тестирует конфигурационный файл httpd.conf и отображает ошибки
Управлять службами также можно, используя в командной строке команду «net». Рассмотрим несколько примеров.
получаем список служб
C:\Windows\system32>net start
запускаем службу
C:\Windows\system32>net start Apache2.4 или C:\Windows\system32>net start "name service"
останавливаем службу
C:\Windows\system32>net stop Apache2.4 или C:\Windows\system32>net stop "name service"
Сериализация: Java vs Kyro
Сериализация играет важную роль в оптимизации любой распределенной системы, а также при настройке производительности Apache Spark. Сериализация напрямую замедляет работу системы, если выбранному типу требуется больше времени для сжатия и преобразования объектов. Spark поддерживает два сериализатора: Java и Kyro.
Java Serializer используется по умолчанию в Apache Spark. В основе лежит структура потока вывода объектов Java и реализуется за счет класса . Он обеспечивает хорошую гибкость и может без проблем работать с большинством форматов. Но он немного медленный.
Kyro Serializer работает примерно в 8 раз быстрее, чем Java Serializer, но недостатком является то, что он не поддерживает все форматы данных и требует. Попробуйте использовать его. Для того, чтобы перейти на Kyro в Spark достаточно указать следующую конфигурацию:
spark.conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
Также стоит помнить, что кэширование может помочь избежать накладных расходов на десериализацию (о кэшировании тут).
Как работает Apache Kafka: потоковая агрегация сообщений в Big Data
Прежде чем говорить про производительность Кафка, напомним, как работает эта Big Data система. Очень кратко работу Apache Kafka можно описать следующим образом :
- приложение-издатель (производитель, producer) отправляет сообщение в топик (topic) Кафка. При этом данные могут быть сжаты с помощью кодеков, например, gzip или snappy.
- Kafka объединяет сообщения в группу (пакет) для хранения в одном разделе (partition) топика;
- Данные записываются на диск, каждый producer пишет в свой раздел реплицированного журнала. После первой записи (лидере, leader) данные реплицируются по всему кластеру, распространяясь по подписчикам (followers).
- В зависимости от значения параметра конфигурации acks, producer получает подтверждение об успешной записи. Например, при acks=-1 (или all), производитель ждет подтверждения о записи на диск с каждого узла. Подробнее про acknowledge мы рассказывали здесь.
- Приложения-потребители (consumers) считывают сообщения из разделов по принципу «1 потребитель на 1 раздел).
Как работает Apache Kafka: краткий ликбез по Big Data
Ускорение работы Apache изменениями во время выполнения
Чтобы повысить производительность сервера, нужно регулярно измерять производительность и осуществлять тонкую настройку конфигурации. Наиболее важные параметры, которые нужно оптимизировать:
Поиск DNS
Apache может тратить время на определение хоста каждого IP, с которого приходит запрос. Это замедляет обработку запроса, а также приводит к пустой трате ресурсов. Чтобы избежать этого, нужно отключить опцию HostnameLookups.
При настройке директив Allow from или Deny from используйте IP-адреса вместо доменных имён. Иначе будет осуществляться двойной поиск имени DNS, который уменьшит производительность сервера.
Настройка AllowOverride
Если задана опция AllowOverride, то Apache попытается открыть файл .htaccess в каждой папке, которую он посещает. Эти дополнительные запросы к файловой системе увеличивают время отправки ответа с сервера.
Поэтому лучше отключить эту опцию. Если переопределение настроек в файлах .htaccess необходимо в определённой папке, нужно разрешить это только для данного каталога.
Настройки FollowSymLinks и SymLinksIfOwnerMatch
Настройка Apache FollowSymLinks сообщает серверу, что нужно проверять символические ссылки и проходить по ним. Если она имеет значение Off, Apache придётся выполнять дополнительные проверки, что замедлит его работу.
Если установлена директива SymLinksIfOwnerMatch, сервер будет проходить по символическим ссылкам, только если владелец целевого файла тот же, что и владелец ссылки. Это также влияет на скорость работы Apache.
Лучше всего активировать директиву FollowSymLinks и выключить директиву ‘SymLinksIfOwnerMatch’. Но это может привести к проблемам с безопасностью, поэтому окончательное решение остается за вами.
Согласование содержимого (Content Negotiation)
Согласование содержимого позволяет клиентам выбирать формат данных, получаемых от сервера. Рекомендуется избегать согласования содержимого для быстрого ответа.
Если согласование содержимого необходимо для сайта, можно снизить задержки, используя файлы type-map вместо директивы Options MultiViews. Ее применение увеличивает задержку.
Настройка MaxClients
Настройка MaxClients устанавливает лимит количества одновременных запросов, которое может поддерживаться Apache. Если это значение слишком мало, запросы станут в очередь, и не будут обрабатываться.
Большое значение параметра может загрузить оперативную память и повлиять на скорость ответов Apache. Необходимо выбрать оптимально значение исходя из объёма доступной памяти и ресурсов, потребляемых процессом.
Настройки MinSpareServers, MaxSpareServers и StartServers
MaxSpareServers и MinSpareServers определяют количество дочерних процессов, которые будут находиться в состоянии ожидания обработки запросов. Эти параметры важны, потому что создание дочернего процесса отнимает ресурсы.
Если значение MinSpareServers слишком низкое, и на сервер поступает одновременно несколько запросов, Apache создаст дополнительные дочерние процессы. Это снижает возможность быстрого ответа на запрос клиента.
Значение MaxSpareServers не должно быть слишком большим. Так как стоящие в очереди на обработку дочерние процессы потребляют лишние серверные мощности. Нужно установить эти значения в оптимальном диапазоне, чтобы сбалансировать использование ресурсов и производительность.
Директива StartServers устанавливает количество дочерних серверных процессов, которые создаются при старте сервера. Если запросов много, а Apache часто перезагружается, нужно установить относительно большое значение.
Настройка MaxRequestsPerChild
Директива MaxRequestsPerChild устанавливает лимит количества запросов, которое будет обрабатывать каждый дочерний процесс. Слишком малое значения может привести к перегрузке сервера при создании новых процессов. Поэтому нужно установить это значение в диапазоне нескольких тысяч, чтобы ускорить работу Apache.
Настройка KeepAlive и KeepAliveTimeout
KeepAlive используется для поддержки единого соединения для передачи данных веб-страницы. Благодаря чему не тратится время на создание нового подключения для каждого файла.
KeepAliveTimeout определяет время ожидания следующего запроса. Если значение большое, дочерние процессы могут расходовать ресурсы, ожидая следующего запроса. Оптимальное значение – 2-5 секунд для небольших объемов трафика и 10 секунд для высоконагруженных серверов.
Timeout
Устанавливает время ожидания запроса от посетителя. При больших объемах трафика значение параметра должно быть не менее 120 секунд. Но лучше держать это значение минимальным. Это позволяет предотвратить излишнее расходование ресурсов.
Настраиваем Апач
При выборе первого метода установки сервера можете задать метод его запуска. При регулярном использовании и наличии свободных ресурсов на ПК используйте автозапуск Apache. В ином случае выбирайте его ручной запуск через контекстное меню службы.
После ручного или автоматического запуска сервера открываем удобный браузер и переходим по адресу: //localhost. Появится пустая страница с таким же адресом.
Дабы приступить к работе делаем следующее.
- Идем в каталог «htdocs», расположенный в папке с файлами программного продукта.
- Удаляем с нее html-файл и создаем каталог с именем сайта (mysite).
- Можете зайти на будущий сайт, введя //localhost/mysite.
- Переходим в папку «conf» и открываем файл «httpd.conf» в текстовом редакторе (желательно, с поддержкой синтаксиса).
- Переходим на строку номер 227 и заменяем «none» на «all». В итоге должно получиться значение «AllowOverride All».
Выполнение такого действия разрешит использовать документ «htaccess». Он представляет собой расширенный конфигурационный файл Apache.
Ищем строку с текстом «#LoadModule rewrite_module modules/mod_rewrite.so» и удаляем символ «#».
Такое действие активирует модуль, отвечающий за создание и функционирование ЧПУ-ссылок.
Сохраняем внесенные изменения и обязательно выполняем рестарт Апач.
Далее выполняется установка PHP.
Настройка SELinux для web сервера apache
Раздел для тех, кто хочет настроить SELinux на своем web сервере. Сначала ставим пакет policycoreutils-python-utils если он еще не установлен. Он нам нужен для утилиты semanage.
# dnf install policycoreutils-python-utils
Теперь автоматически сформируем модуль для selinux на основе событий аудита, которые накопились, пока мы настраивали сайт. Посмотреть их можно командой.
# grep httpd /var/log/audit/audit.log | audit2why
Создаем модуль selinux.
# grep httpd /var/log/audit/audit.log | audit2allow -M my-httpd
Загружаем его.
# semodule -i my-httpd.pp
То же самое делаем для php.
# grep php /var/log/audit/audit.log | audit2allow -M my-php # semodule -i my-php.pp
Добавим нашу директорию /web/sites в соответствующие таблицы selinux для контента и логов.
# semanage fcontext -a -t httpd_sys_content_t "/web/sites(/.*)?" # semanage fcontext -a -t httpd_log_t "/web/sites(/.*)?/log(/.*)?"
И отдельно добавим каталог, куда web сервер сможет писать данные. Я покажу на примере правила для сайтов wordpress, где web сервер должен уметь писать в директорию wp-content для загрузки медиафайлов, установки тем и плагинов, а так же изменять файл wp-config.php.
# semanage fcontext -a -t httpd_sys_rw_content_t "/web/sites/\*/www/wp-content(/.\*)?" # semanage fcontext -a -t httpd_sys_rw_content_t "/web/sites/\*/www/wp-config.php"
Обновляем атрибуты файлов новым контекстом SELinux.
# restorecon -Rv /web/sites
В завершении настройки selinux для apache, добавим еще один параметр, без которого httpd не сможет писать файлы в указанные каталоги.
# setsebool -P httpd_unified 1
Теперь активируем защиту selinux и проверяем, что она работает.
# setenforce 1 # getenforce Enforcing
Режим работы Enforcing означает, что selinux работает. Убедиться, что модули загружены, можно командой.
# semodule -l | grep my-
В целом, по selinux все. Мы просто разрешили все, что веб сервер просил. По идее, надо вдумчиво во всех правилах разбираться и разрешать только то, что считаешь нужным. Я честно скажу, что selinux знаю не очень хорошо. Дальше загрузки готовых модулей и автоматического создания модулей с помощью audit2allow я не двигался. Руками модули никогда не писал. Если есть какой-то более осмысленный и правильный способ настройки selinux на кастомной конфигурации веб сервера, буду рад полезной информации.
Хорошая практическая статья по ручной настройке selinux для web сервера — https://habr.com/ru/post/322904/. Там же есть ссылки на другие статьи автора на тему selinux. Написано содержательно и наглядно, рекомендую для тех, кто будет знакомиться с технологией.
Особенности настройки Apache сервера при использовании разных языков программирования
- Настройте внешний прокси-сервер для изображений и таблиц
Пусть ваши основные веб-сервера обрабатывают основную часть данных, в то время как изображения и таблицы обрабатываются на веб-серверах для внешнего интерфейса.
- Используйте mod_passenger для Rails
mod_passenger может распределять память и ресурсы между несколькими процессами. Он также будет отслеживать эти процессы и удалять их при ненадобности оптимизируя работу вашего продукта.
- Отключите safe_mode для PHP
Он использует 50-70% времени загрузки скрипта для проверки безопасных директив. Вместо этого настройте open_base_dir правильно и используйте плагины, к примеру, mod_itk.
- Используйте настройку кэширования Аpache для часто используемых данных
memcached отлично подходит для часто используемых данных и сессий. Этот шаг существенно увеличит скорость работы.
Если же вы хотите позаботиться о безопасности вашего сервера и сайта, а также грамотно настроить его с учетом всех деталей оптимизации, то лучше всего доверить это профессионалам из System-admins. Наши высококвалифицированные специалисты предоставят вам лучшие услуги на рынке за адекватную цену.
Разница между Apache и Nginx
- Хотя Apache и Nginx являются двумя основными игроками в бизнесе веб-сервера, охватывающим 50 процентов веб-трафика через Интернет, они отличаются друг от друга. Apache — это HTTP-сервер с открытым исходным кодом, тогда как Nginx — высокопроизводительный асинхронный веб-сервер и обратный прокси-сервер.
- Поддержка, исправления ошибок и разработка приложений на HTTP-сервере Apache управляются и поддерживаются сообществом пользователей со всего мира и координируются Apache Software Foundation. Поддержка и обслуживание Nginx осуществляется компанией с таким же названием, которая была основана в 2011 году.
- Основное различие между ними заключается в том, как обрабатываются запросы клиентов. Хотя Apache предоставляет множество модулей многопроцессорной обработки для обработки запросов клиентов и веб-трафика, Nginx сконструирован таким образом, чтобы одновременно обрабатывать несколько клиентских запросов с минимальными аппаратными ресурсами.
- В HTTP-сервере Apache один поток связан только с одним соединением, тогда как один поток в Nginx может обрабатывать несколько соединений. Все процессы помещаются в цикл событий вместе с другими соединениями и управляются асинхронно. Этот процесс потребляет меньше памяти, что повышает производительность.
- Apache имеет многопоточную архитектуру, которая не обладает масштабируемостью. С другой стороны, Nginx следует асинхронному методу, основанному на событиях, для обработки нескольких клиентских запросов. Его управляемая событиями архитектура разработана таким образом, чтобы обеспечить лучшую производительность даже при интенсивном движении.
- Apache обслуживает статический контент с использованием обычных методов и обрабатывает динамический контент изначально внутри самого веб-сервера.С другой стороны, Nginx не имеет возможности обрабатывать динамический контент внутри компании. Фактически, он полагается на внешние процессы для исполнения.
Web сервер на CentOS 8
Итак, наш веб сервер centos будет состоять из трех основных компонентов — http сервера apache, интерпретатора языка программирования php и сервера баз данных mysql. Познакомимся немного с каждым из них:
- Apache — http сервер или просто веб сервер апач. Является кросплатформенным ПО, поддерживающим практически все популярные операционные системы, в том числе и Windows. Ценится прежде всего за свою надежность и гибкость конфигурации, которую можно существенно расширить благодаря подключаемым модулям, которых существует великое множество. Из недостатков отмечают большую требовательность к ресурсам, по сравнению с другими серверами. Держать такую же нагрузку, как, к примеру, nginx, apache не сможет при схожих параметрах железа.
- PHP — язык программирования общего назначения, который чаще всего применяется в веб разработке. На сегодняшний день это самый популярный язык в этой области применения. Поддерживается практически всеми хостинг-провайдерами.
- Mysql — система управления базами данных. Завоевала свою популярность в среде малых и средних приложений, которых очень много в вебе. Так что, как и php, на сегодняшний день является самой популярной бд, использующейся на веб сайтах. Поддерживается большинством хостингов. В CentOS вместо mysql устанавливается mariadb — ответвление mysql. Они полностью совместимы, возможен в любой момент переход с одной субд на другую и обратно. Я встречал информацию, что mariadb пошустрее работает mysql и люди потихоньку перебираются на нее. На практике мне не довелось это наблюдать, так как никогда не работал с нагруженными базами данных. А в обычных условиях разница не заметна.
Подопытным сервером будет выступать виртуальная машина от ihor, характеристики следующие:
Процессор | 2 ядра |
Память | 3 Gb |
Диск | 30 Gb SSD |
Хочу сразу уточнить, что разбираю базовую дефолтную настройку. Для улучшения быстродействия, повышения надежности и удобства пользования нужно установить еще несколько инструментов, о чем я расскажу отдельно. В общем случае для организации веб сервера будет достаточно того, что есть в этой статье.
Удаление службы используя командную строку
На моей практике был случай, когда я удалил файлы веб-сервера, забыв перед этим остановить службу и удалить ее. Соответственно служба не работала, так как файлы были удалены, но висела в списках. При развертывании нового веб-сервера, а именно при попытки установить службу, консоль ругалась, что данная служба уже установлена.
Для решения данной проблемы пришлось удалить службу, выполнив в командной строке следующую команду:
C:\Windows\system32>sc delete ServiceName или C:\Windows\system32>sc delete "Service Name"
где ServiceName или «Service Name» имя удаляемой службы
По итогам изучения данного материала мы рассмотрели процесс установки локального веб-сервера, познакомились с главным конфигурационным файлом httpd.conf и его основными директивами. Так же мы рассмотрели механизмы управления службой Apache, такие как: запуск, остановка, удаление, просмотр версии.
На следующем шаге мы подключим модуль интерпретатора языка программирование PHP к установленному веб-серверу, и тем самым укажем веб-серверу, что он должен исполнять php скрипты.
Откуда появился Апач
Первая версия этого веб-сервера появилась в 1995 году, когда браузеры стали набирать популярность. Цепочка была такая:
В интернет начали приходить простые пользователи, а не только айтишники → они стали искать и читать то, что им интересно → чтобы им это отдать, серверы напрягались, потому что раньше такой нагрузки не было → старый софт перестал справляться, и появился Апач.
Всё дело в том, что в старом софте и протоколах, которые использовались, был один слабый момент: когда нагрузка становилась большой, система не справлялась, начинала глючить и выдавать не то, не тем и не в нужное время. А название Apachе родилось как созвучное фразе «a patchy server» — сервер, который накладывает заплатки и патчи на существующие технологии.
С тех пор технологии поменялись, а название осталось.
Как управлять кэшированием
Для того, чтобы сайт работал максимально эффективно, целесообразно устанавливать время кэширования для различных типов файлов на максимально возможный срок. Для этого существует модуль Apache mod_expires.
Настройка параметров модуля mod_expires производится в файле .htaccess, что позволяет сделать индивидуальные настройки для каждого каталога.
В приведенном ниже примере отключено кэширование для текстовых документов, установлен период обновления для файлов с расширением gif — 3 месяца с момента изменения файла, для файлов с расширением jpeg — 1 день с момента обращения:
Примечание: При использовании Parser если вам необходимо полностью исключить заголовки от модуля Apache mod_expires, то для этого необходимо в директории с parser3.cgi создать файл . и внести в него следующую директиву:
Смысл веб-сервера
Apache — это как раз веб-сервер, то есть он обрабатывает запросы и отдаёт в ответ на них сайты. Он работает примерно так:
- У него есть список портов, которые он «слушает», — представьте, что это столики, которые обслуживает официант.
- Если на какой-то порт приходит запрос, это равносильно тому, как если бы гость ресторана сделал заказ. Сервер изучает этот заказ и заглядывает в свои внутренние правила: можно ли этот заказ исполнять.
- Чаще всего внутренние правила звучат так: возьми такие-то файлы, запусти такой-то процесс, получи от него такой-то результат и передай его тому, кто этот запрос сделал.
- Иногда клиент заказывает что-то, что нельзя подавать — в правилах стоит запрет. Например, это какой-то секретный документ. Тогда сервер смотрит, как ответить клиенту в этой ситуации. Например, он покажет страницу с ошибкой.
- Когда запрос выполнен (успешно или с ошибкой), сервер снова ждёт нового запроса.
Установка APC
Для начала надо установить необходимые пакеты:
# apt-get install apache2-threaded-dev php5-dev php5-pear make gcc g++
Затем установить APC при помощи pecl:
# pecl install apc
Отредактировать конфигурационный файл:
#vi /etc/php5/apache2/php.ini
Добавить в него следующую строку:
extension = apc.so apc.shm_size = 64 Количество выделяемой оперативной памяти в МБ. apc.enabled=1 APC включен. Довольно очевидная настройка, но очень важная. Отключение APC может привести к уменьшению производительности на рабочем сервере.
apc.shm_segments=1 apc.shm_size=32
Эти настройки показывают сколько памяти выделять под APC. APC.shm_segments=1 — показывает что выделяется один сегмент памяти, а apc.shm_size=32 показывает, что размер этого сегмента 32 мегабайта. Вы можете поменять размер сегмента, скажем на 64 мегабайта и перезапустить Apache. Потом если количество MISS не будет сведено к 1% сделать размер 128 МБ и так далее. Это основной параметр для работы с APC.
apc.cache_by_default=1
apc.filters= Работа APC для всех php скриптов. При этом мы можем закомментировать строчку с apc.filters. apc.stat=1
Этот параметр напрямую влияет на производительность. При включенной настройке кэш в APC остается там пока не будет удален. В случае когда настройка отключена, то APC будет сравнивать время выполнения скрипта и время последнего изменения файла и добавлять в кэш новую версию. Эта настройка необходима для рабочего сервера, однако для разработки эту настройку лучше всего отключить. И еще при включенной настройке apc.stat необходимо очистить кэш APC при обновление модулей и ядра Drupal.
apc.ttl=0
Эта настройка показывает через сколько миллисекунд очистить кэш. При 0 кэш не очищается. Поэтому мы ставим 0, мы же не хотим чтобы каждый час нужный нам кэш очищался (по умолчанию 7200, то есть 2 часа).
apc.num_files_hint=2048
Эта настройка может быть очень нужна, когда на сервере несколько сайтов, несколько Drupal. Потому что один Drupal может забивать в кэш более 500 файлов. Чтобы кэш одного сайта не затирал в кэше файлы другого, лучше включить эту настройку побольше (по умолчанию 1024).
Для вступления настроек в силу необходимо перезапустить веб-сервер.
#/etc/init.d/apache2 restart
Установка apache
Устанавливаем репозитарий epel. Полностью epel репозиторий называется так — Extra Packages for Enterprise Linux. Это хранилище пакетов, созданное группой специалистов операционной системы Fedora. Пакеты из epel репозитория никогда не конфликтуют и не переустанавливают базовые пакеты RHEL.
Теперь установим репозитарий codeit для получения последних версий apache:
Если у вас установлен firewall – конфигурируем его для открытия портов web сервера:
делаем рестарт сервера
На случай если получаем сообщение по типу при перезапуске httpd (сервера апача), идем и в файле ищем вот эти строки:
После ServerName прописываем IP адрес нашего сервера.
В файле лучше будет закомментировать этот модульПрактически наверняка вы его не будете использовать.А лишние подлюченные модули только создают проблемы.
Настройка NGINX
Продолжим тюнинг nginx, настроив несколько основных параметров, отвечающих за количество обрабатываемых соединений и сроки их поддержания.
Открываем конфигурационный файл nginx.
а) во FreeBSD:
vi /usr/local/etc/nginx.conf
б) в Linux:
vi /etc/nginx/conf/nginx.conf
… или, если nginx ставился из пакетов:
vi /etc/nginx/nginx.conf
Пример настроенного nginx.conf:
worker_processes auto;
worker_priority -2;
…
events {
worker_connections 2048;
multi_accept on;
}
…
http {
…
keepalive_timeout 45;
reset_timedout_connection on;
client_body_timeout 35;
send_timeout 30;
…
}
worker_processes, по умолчанию 1. Определяет количество рабочих процессов. Обычно, выставляют равному числу ядер, но в новых версиях его лучше устанавливать в auto.
worker_priority, по умолчанию 0. Задает приоритет рабочих процессов от -20 до 20 (отрицательное число означает более высокий приоритет). Ему стоит отдать чуть больший приоритет (-2). Это нужно для того, чтобы при сильной нагрузке на скриптовую часть сайта или DDoS атаке, nginx продолжал обрабатывать запросы и отдавать статику.
worker_connections, по умолчанию 512. Устанавливает максимальное количество соединений одного рабочего процесса, то есть nginx будет обрабатывать worker_processes * worker_connections, остальные запросы ставить в очередь. Следует выбирать значения от 1024 до 4096. В нашем примере — 2048.
multi_accept, по умолчанию off. Если включен, позволяет принимать максимально возможное количество соединений. Иначе, процесс nginx за один раз будет принимать только одно новое соединение.
keepalive_timeout, по умолчанию 75. Отвечает за максимальное время поддержания keepalive-соединения, в случае, если пользователь по нему ничего не запрашивает. Для современных систем, стоит выставить от 30 до 50. В нашем случае 45.
reset_timedout_connection, по умолчанию off. Если клиент перестал читать страницу, Nginx будет сбрасывать соединение с ним.
client_body_timeout, по умолчанию 60. Будет ждать выставленное количество секунд тело запроса от клиента, после чего сбросит соединение. Значение по умолчанию слишком высокое и мы его снизили до 35.
send_timeout, по умолчанию 60. Если клиент прекратит чтение ответа, Nginx подождет выставленное количество секунд и сбросит соединение.
FollowSymLinks и SymLinksIfOwnerMatch
Если для директории включена опция FollowSymLinks, сервер будет следовать по символическим ссылкам в этой директории. Если для директории включена опция SymLinksIfOwnerMatch, apache будет следовать по символическим ссылкам только если владелец файла или директории, на которую указывает эта ссылка совпадает с владельцем указанной директории. Так что при включенной опции SymLinksIfOwnerMatch apache делает больше системных запросов.
Кроме того, дополнительные системные запросы требуются когда FollowSymlinks НЕ УСТАНОВЛЕН. Т.о. наиболее оптимальная ситуация для производительности – когда опция FollowSymlinks включена.
Log Files and Troubleshooting
As an Apache HTTP Server administrator, your most valuable assets are
the log files, and, in particular, the error log. Troubleshooting any
problem without the error log is like driving with your eyes closed.
The location of the error log is defined by the directive, which may be set globally,
or per virtual host. Entries in the error log tell you what went wrong,
and when. They often also tell you how to fix it. Each error log message
contains an error code, which you can search for online for even more
detailed descriptions of how to address the problem. You can also
configure your error log to contain a log ID which you can then
correlate to an access log entry, so that you can determine what request
caused the error condition.
Настройка предкомпиляторов PHP:
PHP — движок, который запускает код приложений. Необходимо установить только те модули, которые планируются использоваться для выполнения скриптов, и сконфигурировать веб-сервер apache для использования PHP только для файлов скриптов (обычно те файлы, названия которых заканчиваются на .php), а не всех статических файлов.
Кэширование кода операции:
Когда запрашивается скрипт PHP, PHP читает скрипт и собирает его в то, что называется код операции Zend, бинарное представление кода, который будет выполнен. Этот код операции затем выполняется движком PHP и теряется. Кэширование кода операции сохраняет его и в следующий раз при запросе страницы вновь использует, это экономит немало времени.
Акселератор PHP — расширение для PHP, основное назначение которого — увеличение производительности интерпретатора при обработке сценариев путем кэширования их байт-кода.
Как выглядит обработка сценария на PHP обычным интерпретатором:
- Чтение файла.
- Генерация байт кода.
- Выполнение кода.
- Выдача результата.
Дело в том, что при выполнении стандартного обращения к PHP скрипту, каждый раз он компилируется заново. То есть, одна и та же работа делается несколько раз. Если это маленький проект, замедления в работе могут быть незначительными, даже невидимыми. Но если у вас большой проект (сайт), то вы замечали, что при обращении идет задержка загрузки страницы, несмотря на то, что сайт хорошо оптимизирован, в плане сжатия html и сжатия css.
Как выглядит обработка сценария на PHP с использованием кэширования:
- Чтение файла.
- Проверка, есть ли кэш для файла (создан или истекло время хранения).
- Если есть, отдается кэшированный контент.
- Если нет, то создается кэш и выдается его содержимое.
Шаг 2 — Установка MySQL
Теперь мы установим MySQL, популярную СУБД, используемую в средах PHP.
Используйте apt для получения и установки этого программного обеспечения:
После завершения установки рекомендуется запустить скрипт безопасности, входящий в комплект MySQL. Для запуска интерактивного скрипта введите следующую команду:
Скрипт запросит подтверждение настройки плагина VALIDATE PASSWORD PLUGIN . Выберите Y для активации или любой другой вариант, чтобы продолжить без активации этой функции. Если вы выберете ответ «yes» («Да»), вам будет предложено выбрать уровень подтверждения паролем.
Затем сервер попросит вас выбрать и подтвердить пароль для пользователя root MySQL. Хотя в MySQL метод аутентификации пользователя root по умолчанию не требует использования пароля даже при его наличии, задайте надежный пароль для обеспечения дополнительной безопасности.
Для всех остальных вопросов нужно выбирать Y и нажимать ENTER в каждом диалоге.
Примечание. На момент написания этого руководства родная библиотека MySQL PHP mysqlnd не поддерживает caching_sha2_authentication , метод аутентификации MySQL 8 по умолчанию. Поэтому при создании пользователей базы данных для приложений PHP на MySQL 8 вам нужно убедиться, что они настроены на использование вместо этого пароля mysql_native_password . Подробнее об этой процедуре можно узнать в шаге 6 нашего подробного руководства по установке LAMP в Ubuntu 20.04.