Php акселераторы на centos и vestacp

Ускорение работы 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 за минут?

Но прежде чем начать ускорять сервер, проверим текущую скорость на примере этого сайта. Воспользуюсь вот этим тестом скорости — Web Page Test

Ускорить сервер я решил установкой специального пакета, который предоставляет сам GOOGLE — PageSpeed Module. Есть пакет для Apache и исходники для Ngnix. Я пока не знаю, что мне нужно, так как у меня работают два веб сервера одновременно.

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

Но прежде чем скачать нужный пакет и установить его, нам нужно узнать версию своего сервера и его архитектуру. Сначала узнаем, какой Linux стоит на нашем сервере:

lsb_release -a

Получил ответ:  Distributor ID: Debian Description: Debian GNU/Linux 7.8 (wheezy) Release: 7.8 Codename: wheezy Теперь нужно узнать, какая архитектура у нашего сервера — 32 или 64 bit? Даем команду:

uname -r

Получил ответ: amd64. Все понятно, нужно скачать пакет mod_pagespeed 64-bit .deb (Debian/Ubuntu). Скачиваем его и загружаем на сервер, например, в папку /home. Не забываем назначить пакету права 755. Переходим в каталог, куда загрузили пакет, например:

cd /home Теперь даем команду для установки пакета (в Debian без sudo):

sudo dpkg -i mod-pagespeed-*.deb sudo apt-get -f install

Вторая команда не обязательна, она просто восстанавливает зависимости пакетов, если они вдруг нарушились.

Если все прошло нормально, то перезагружаем web сервер apache:

sudo service apache2 restart

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

Хм, тест показал, что сайт стал на 2 секунды быстрее, случайность это или закономерность? Но так или иначе, хуже не стало, а только лучше. Но все же общее время загрузки страницы пока очень большое, нужно попробовать еще ускорить ngnix, так как он принимает запросы. А как видно из графика, первый отклик сайта происходит АЖ через секунду! Так же на графике видно, что сервис gravatar сильно замедляет страницу. Я раньше отключал его, но без него все комментаторы становятся безликими.

Отладка JIT (opcache.jit_debug)

PHP JIT обеспечивает способ выдачи отладочной информации JIT путем установки конфигурации INI. Когда установлен определенный флаг, он выводит код сборки для дальнейшей проверки.

Директива opcache.jit_debug принимает значение битовой маски для включения определенных функций. В настоящее время он принимает значение в диапазоне от 1 (0b1) до 20 двоичных разрядов. Значение 1048576 представляет максимальный уровень вывода отладки. 

JIT поддерживает несколько других параметров конфигурации, чтобы настроить, сколько вызовов функций делает ее «горячей» функцией, которая затем компилируется JIT, и порог для определения того, какие функции следует «JIT’ировать», на основе процента общих вызовов функций.

Полный список см. В разделе Конфигурация Opcache.  

eAccelerator

eAccelerator — это свободный opensource-проект, выполняющий роли акселератора, оптимизатора и распаковщика. Также встроены функции динамического кэширования контента. eAccelerator повышает производительность работы PHP-скриптов за счет кэширования скомпилированного байт-кода, таким образом издержки на процесс компиляции ликвидируются. Также он оптимизирует скрипты для ускорения времени их исполнения. eAccelerator обычно снижает нагрузку на сервер и увеличивает скорость работы php кода в 1-10 раз.
eAccelerator сохраняет скомпилированый PHP-код сначала в общей памяти, затем на диске, все время поддерживая размер занятой памяти оптимальным для производительной работы приложений.
Поддерживает PHP4 и PHP5, включая 5.3.

Перспективы улучшения производительности PHP

Эволюция PHP продолжается. Новейшее изменение в разработке PHP 8 — это добавление компиляции «на лету», или JIT-компиляции, которая позволит создавать еще более быстрые веб-приложения. Так как темп технологического прогресса растет, растут ожидания пользователей. Поэтому разработчики должны всегда внимательно следить за последними изменениями.

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

Zend Opcache (например, Zend Optimizer +)

Zend Opcache — это компонент Zend Server и Zend Server Community Edition с открытым исходным кодом . Zend Opcache ускоряет выполнение PHP за счет кэширования и оптимизации кода операции. Он хранит байт-код предварительно скомпилированного скрипта в общей памяти. Начиная с версии 7.0, он может хранить предварительно скомпилированный байт-код скрипта на диске. Это исключает этапы чтения кода с диска и его компиляции при последующем доступе. Для дальнейшего повышения производительности сохраненный байт-код оптимизирован для более быстрого выполнения. В отличие от Zend Optimizer, Zend Opcache не загружает файлы, закодированные Zend Guard. Zend предоставляет другой компонент, Zend Guard Loader, для загрузки закодированных приложений с помощью Zend Server и Zend Server Community Edition.

Начиная с PHP 5.5 Zend Opcache интегрирован и поставляется с PHP.

  • Версия PHP: полная поддержка PHP 5.2+
  • Последняя стабильная версия: 7.1.6
  • Статус: в активном состоянии

Когда следует начинать оптимизировать PHP-код?

Опытные программисты время от времени сохраняют протестированный код, заканчивая тем самым цикл проекта. Но это разумно делать только при хорошей производительности PHP-приложения!

Как добиться хорошей производительности PHP-приложения? Необходимо проводить тесты во время процесса разработки. Иначе придется переписывать большие блоки кода, чтобы заставить приложение нормально функционировать.

Оптимизировать PHP-код следует начинать перед созданием PHP-приложения! Необходимо сразу оценить состояние вашего железа и программного обеспечения, чтобы определить параметры их производительности. Эта информация при кодировании приложения позволит оценить риски и выигрыш конкретных компромиссов. Причем необходимо использовать адекватные тестовые данные, иначе код приложения окажется бесперспективным.

PHP JIT

JIT в PHP появилась давно. На самом деле он находился в разработке в течение нескольких лет и почти был выпущен в PHP 7.4. Работа по созданию JIT в PHP была тем импульсом, который привел к серьезному переписыванию движка, что дало версии 7.0 значительный прирост производительности.

PHP JIT построен как расширение кеша опкодов. Это означает, что его можно включать и отключать либо при сборке самого PHP, либо во время выполнения через php.ini.

Честно говоря, настройка JIT — один из самых запутанных способов настройки расширения PHP, который я когда-либо видел. К счастью, есть несколько сокращений конфигурации, которые упрощают настройку. Тем не менее, будет очень полезным знать как настраивать JIT, так что приступим.

Установка eAccelerator:

 #apt-get install php5-dev 

Загрузите архив с исходными кодами eAccelerator:

 #wget http://bart.eaccelerator.net/source/0.9.5/eaccelerator-0.9.5.tar.bz2 

Распаковка архива:

 #tar jxvf eaccelerator-0.9.5.tar.bz2
#cd eaccelerator-0.9.5 

Далее необходимо запустить phpize для создания config-файлов, необходимых для сборки:

#phpize
#./configure –enable-eaccelerator=shared –with-php-config=/usr/bin/php-config
#make
#make install
cp modules/eaccelerator.so path-to-php/lib/php/extensions/no-debug-non-zts-xxxxxxxx/

Акселератор установлен.

Теперь необходимо отредактировать файл path-to-php.ini/php.ini для пользователей php и добавить в него следующие параметры для подключения расширения:

 #vi path-to-php/php.ini
extension=”eaccelerator.so”
eaccelerator.shm_size=”16″
eaccelerator.cache_dir=”/tmp/eaccelerator”
eaccelerator.enable=”1″
eaccelerator.optimizer=”1″
eaccelerator.check_mtime=”1″
eaccelerator.debug=”0″
eaccelerator.filter=””
eaccelerator.shm_max=”0″
eaccelerator.shm_ttl=”0″
eaccelerator.shm_prune_period=”0″
eaccelerator.shm_only=”0″
eaccelerator.compress=”1″
eaccelerator.compress_level=”9″

Максимальный размер кэша в мегабайтах:

 eaccelerator.shm_size="512" 

Корневой каталог для хранения кэша:

 eaccelerator.cache_dir="/var/cache/eaccelerator" 

Включение акселератора:

 eaccelerator.enable="1" 

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

eaccelerator.optimizer="1" 

Включает проверку модификации PHP файлов:

 eaccelerator.check_mtime="1" 

Режим отладки. Если поставить 1 или вообще забыть упомянуть этот параметр, при большой посещаемости загадит логи Apache за считанные часы:

 eaccelerator.debug="0" 

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

 eaccelerator.filter="" 

Максимально допустимое значение которое может быть отправлено в разделяемую память. По-умолчанию, «ноль» — без ограничений. Размер указывается в байтах, но можно указать приставки, например: 10240, 10K, 1M:

 eaccelerator.shm_max="0" 

Когда акселератору потребуется отправить в разделяемую память какой-то объект и при этом в памяти для этого не окажется места, он попытается удалить файлы, которые не были запрошены в течении последних «shm_ttl» секунд. По-умолчанию, это значение равно «0» — не удалять ничего:

eaccelerator.shm_ttl="0" 

Когда акселератору потребуется отправить в разделяемую память какой-то объект и при этом в памяти для этого не окажется места, он попытается удалить старые скрипты, если предыдущие такие попытки были не больше, чем «shm_prune_period» секунд назад.По-умолчанию, это значение равно «0» — не удалять ничего:

 eaccelerator.shm_prune_period="0" 

Включить или отключить кэширование скомпилированных скриптов _только_ на диск. Этот параметр не влияет на данные сессий и кэширование контента. По-умолчанию, значение 0, означает, что данные будут кэшироваться и в памяти и на диске:

 eaccelerator.shm_only="0" 

Включить или отключить сжатие закэшированного контента. По-умолчанию, «1» — сжимать:

 eaccelerator.compress="0" 

Уровень сжатия. По-умолчанию, «9» — максимум:

 eaccelerator.compress_level="3" 

Создание cache-директории. Последний важный шаг в настройке акселератора — это создание директории для кэша, имя которой мы задавали в конфигурационном файле. Значение по умолчанию — /tmp/eaccelerator, потому что права на запись в папку /tmp обычно есть у всех пользователей

Не очень хорошим решением будет оставлять права на запись для всех пользователей. Более безопасным будет сменить владельца директории eaccelerator на пользователя, от имени которого запущен PHP (в большинстве случаев это web-сервер. Например apache или lighttpd) и установить на нее права 0644

#mkdir /tmp/eaccelerator
#chown nobody:nobody /tmp/eaccelerator (либо указать пользователя PHP вместо nobody)
#chmod 0644 /tmp/eaccelerator 

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

 #/etc/init.d/apache2 restart 

На этом настройка eAccelerator закончена
Если при доступе к созданному файлу с кодом:

 <?php
phpinfo();
?> 

видно информацию о eAccelerator, то все установлено корректно.

Таблица совместимости

Ускорители PHP Доступность Операционные системы Веб-серверы Версия PHP
Окна Linux FreeBSD macOS NetBSD Солярис IIS Apache Nginx 5.2 5,3 5,4 5.5 5,6 7.0 7.1 7.2 7.3
БТР Снято с производства да да да да ? да ? да да да да да Нет Нет Нет Нет Нет Нет
eAccelerator Снято с производства да да да ? ? да да да да да да да Нет Нет Нет Нет Нет Нет
ionCube Снято с производства да да да да ? да ? да ? да да да да да да да да Нет
Turck MMCache Снято с производства ? ? ? ? ? ? ? ? ? да Нет Нет Нет Нет Нет Нет Нет Нет
XCache Снято с производства да да да да ? ? ? да да да да да да да Нет Нет Нет Нет
Nusphere PhpExpress Снято с производства да да да да да да ? ? ? да да Нет Нет Нет Нет Нет Нет Нет
Zend Opcache (например, Zend Optimizer +) Поддерживается да да да да ? Нет да да да да да да да да да да да да
Платформа Zend Снято с производства Нет да Нет Нет Нет да Нет да Нет да Нет Нет Нет Нет Нет Нет Нет Нет
Кэш Windows Поддерживается да Нет Нет Нет Нет Нет да ? ? да да да да да да да да ?

Оптимизация баз данных MySQL

Как ни странно, это одна из наиболее простых задач, а все благодаря удобному инструменту Mysqltuner. Скачать последнюю и наиболее полную версию можно с официального разработчиков, выполнив несколько команд:

wget http://mysqltuner.pl/ -O mysqltuner.pl
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/basic_passwords.txt -O basic_passwords.txt
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/vulnerabilities.csv -O vulnerabilities.csv

Теперь скрипт необходимо запустить с помощью команды:

sudo perl mysqltuner.pl --buffers --dbstat --idxstat --outputfile /tmp/result_mysqltuner.txt

Это позволит получить исчерпывающие сведения о состоянии MySQL, которые будут записаны в текстовый файл /tmp/result_mysqltuner.txt (вы можете задать любое имя и местоположение для отчета). Стоит учитывать, что скрипт пригоден для сканирования продакшн-сервера, проработавшего без перерыва не менее 24 часов, в противном случае информация может быть недостоверной.

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

Настройка опций в файле php.ini

allow_url_fopen

Опция включает поддержку оберток URL (URL wrappers), которые позволяют работать с объектами URL по протоколам ftp или http как с обычными файлами.

Включение опции (для отключения значение = 0):

allow_url_fopen = 1

apc.cache_by_default

APC — акселератор PHP, использование которого увеличивает производительность интерпретатора за счет кэширования. В отдельных случаях, однако, может потребоваться его отключение — например, если скрипты не выполняются корректно из-за переполнения кэша.

Отключение APC (для включения значение = 1):

apc.cache_by_default = 0

Указание кодировки по умолчанию:

default_charset = "cp1251"

Включение вывода ошибок (для выключения значение = off).

display_errors = on

Отключение Magic Quotes (для включения значение = 1):

magic_quotes_gpc = 0

mail.add_x_header

Включение логирования отправки почты из скриптов сайта. В директиве mail.log указывается путь к файлу, в который будут сохраняться логи (замените u и user на первую букву вашего логина и сам логин).

mail.add_x_header = on
mail.log = /home/u/user/public_html/mail.log

Изменение количества вводимых переменных:

max_input_vars = 11000

Настройки для старых версий CMS Битрикс:

mbstring.internal_encoding = UTF-8
mbstring.func_overload = 2

Отключение OpCache (настройка для CMS Битрикс):

opcache.revalidate_freq = 0

Лимит на рекурсию:

pcre.recursion_limit = 14000

post_max_size

Максимальный размер данных, отправляемых методом POST. Это значение также влияет на загрузку файлов — для загрузки больших файлов оно должно быть больше значения директивы upload_max_filesize.

post_max_size = 40M

Отключение Register Globals (для включения значение = 1):

register_globals = 0

Регулирует порядок, в котором PHP добавляет переменные GET, POST и Cookie в массив _REQUEST.

request_order = GPC

ionCube PHP-ускоритель

Запущенный в 2001 году, ionCube PHP Accelerator (PHPA) был первым свободно доступным PHP-ускорителем, который конкурировал с коммерческим продуктом Zend Cache. Созданный до основания ionCube Ltd. и в то время, когда производительность PHP считалась невысокой по сравнению с другими популярными языками веб-программирования, PHPA показал, что PHP может конкурировать с другими языками по производительности. Хотя автор PHPA решил оставить проект с закрытым исходным кодом в ответ на ранние опасения, высказанные Зивом Сураски из Zend Technologies по поводу влияния, которое конкурент с открытым исходным кодом может оказать на их коммерческую альтернативу, доступность PHPA на большом количестве платформ привела к к его широкому распространению по всему миру от небольших сайтов до Yahoo !. Это также вдохновило на переработку APC для использования методов выполнения с общей памятью, которые были приняты PHPA и Zend Cache, вместо десериализации при каждом запросе, влекущем за собой снижение производительности.

Сайт: http://www.php-accelerator.co.uk / http://www.ioncube.com

Установка и настройка Memcache:

Модуль Memcached для PHP доступен в репозитории уже скомпилированным (php5-memcached), но я опишу процесс установки из исходного кода, так как не все репозитории настолько богаты, как дебиановский.

Устанавливаем сервер Memcached:

#apt-get install memcached 

Для начала, хватит следующих правок конфигурационного файла:

#/etc/memcached.conf 

Memcached будет работать, как демон:

-d 

Путь для лога:

logfile /var/log/memcached.log 

Отведём 256 мегабайт ОЗУ под хранилище:

-m 256 <code>
<code | Слушать будет этот порт:>
-p 11211 

В последствии желательно поменять:

-u nobody 

Слушаем localhost:

-l 127.0.0.1 

Перезапускаем memcache

 #/etc/init.d/memcached restart
# max connection 2048 MAXCONN="2048" # set ram size to 2048 - 2GiB CACHESIZE="4096 

Далее проверяем, запустился ли memcached:

# netstat -tap | grep memcached 

В случае успеха, получим результат:

tcp 0 0 localhost:11211 *:* LISTEN 13036/memcached 

Компилируем и устанавливаем модуль для PHP:

apt-get install php5-memcached
apt-get install php5-dev libmemcache-dev
pecl download memcache
tar xzvf memcache-2.2.6.tgz
cd memcache-2.2.6/
phpize && ./configure --enable-memcache && make
cp modules/memcache.so /usr/lib/php5/20060613/
echo 'extension=memcache.so' >> /etc/php5/apache2/php.ini
/etc/init.d/apache2 restart 

При перезапуске memcached весь кэш теряется.

Настройки memcached:

STAT maxbytes 134217728
STAT maxconns 1024
STAT tcpport 11211
STAT udpport 11211
STAT inter 127.0.0.1
STAT verbosity 0
STAT oldest 0
STAT evictions on
STAT domain_socket NULL
STAT umask 700
STAT growth_factor 1.25
STAT chunk_size 48
STAT num_threads 4
STAT stat_key_prefix :
STAT detail_enabled no
STAT reqs_per_event 20
STAT cas_enabled yes
STAT tcp_backlog 1024
STAT binding_protocol auto-negotiate
STAT auth_enabled_sasl no
STAT item_size_max 1048576 

Актуальность: 2015/01/26 10:35

Оптимизация кода

ООП

Помните! ООП — это всегда медленно. Объекты нужно создавать, где-то хранить и уничтожать. Не используйте объекты, если они не нужны. Например, тут:

Создаем объект только для того, чтобы сохранить данные в БД

<?

# $posts = список объектов Post, полученных каким-то образом
foreach ( $posts as $post )
{
    echo $post->title . '&lt;br/>;';
}

Используем список объектов только для того, чтобы вывести свойство

В этих примерах использование ООП не имеет особого смысла. Зато расходует ресурсы. Старайтесь использовать массивы, когда объекты не нужны.

<?
mysql::insert(, 'description' => $_GET]);

Избежали создания объекта, функция просто сохраняет данные из массива в базу или тут:

$posts = mysql::query('SELECT title FROM posts');
foreach ( $posts as $post )

{
echo $post . '<br/>';
}

Намного лучше — сделать простую выборку и вывести нужные данные из массива

Мелочи

При работе с файлами используйте абсолютные пути. Тогда не будут происходить лишние операции поиска файла:

<?
include 'file.php';
file_get_contents('dir/data.txt');
include '/var/www/file.php';
file_get_contents('/var/www/dir/data.txt');

Константы классов работают эффективнее, чем define:

<?
define('MAX_POSTS_PER_PAGE', 10);
class posts {
    const PER_PAGE = 10;
    ...

Не используем функции в условии for, т.к. они будут повторяться на каждой итерации цикла:

<?
for ( $i = 0; $i < mysql::get_col('SELECT count(*) FROM posts'); $i++ )
{
...
}

$max = mysql::get_col('SELECT count(*) FROM posts');
for ( $i = 0; $i < $max; $i++ )
{
...
}

В качестве ключей массивов всегда указывайте строки с кавычками:

<?
$post = 'Первый пост';
$post = 'Первый пост';

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

<?
preg_match('/хорошо/ui', $post);
strpos($post, 'хорошо');

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

<?
$post = "Почему?";
$post = 'В этом случае нет дополнительной обработки переменных'

Платформа Zend

Платформа Zend (ранее Zend Cache, а затем Zend Accelerator) — это коммерческий сервер веб-приложений. Он имеет полный набор возможностей повышения производительности, который включает больше, чем простой ускоритель PHP. Возможности включают кэширование / ускорение кода, кэширование данных, кэширование содержимого (вывода html), оптимизацию загрузки и возможности автономной (асинхронной) обработки, которые могут привести к значительному повышению производительности для большинства приложений PHP. Он также включает в себя подробный мониторинг PHP и поддержку анализа основных причин для помощи в настройке и отладке, поддержку переключения сеансов при отказе для нужд HA ( High Availability ) и другие возможности интеграции, включая интеграцию с Java.

Сайт: http://www.zend.com/products/platform

Zend Platform и Zend Core сейчас находятся в состоянии «истекшего срока службы» и заменены Zend Server.

5 шагов для ускорения работы Apache

Ускорить работу Apache можно на двух основных стадиях:

  • Во время компиляции – настройки при установке сервера.
  • Во время выполнения — установка параметров, влияющих на сервер во время его работы.

Настройки для ускорения Apache во время компиляции

Нужно выбирать вариант установки Apache, исходя из ваших требований. Это поможет создать быстрый и эффективный веб-сервер.

Загружайте только нужные модули

В Apache функциональность реализуется путем добавления модулей. Они бывают двух типов: статические и динамические (общие).

Чтобы посмотреть список модулей, поддерживаемых вашим сервером, используйте команду apachectl -M. Статические модули компилируются в бинарные файлы httpd, а динамические загружаются непосредственно во время выполнения.

Статические и динамические модулиключевые различия

Статические модули Динамические модули
Компилируются в бинарные файлы Добавляются во время выполнения
Требуют перекомпиляции кода Перекомпиляция не требуется
Быстро загружаются Замедляют веб-сервер

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

Но большое количество динамических или общих модулей может замедлить работу сервера Apache и сайта

Поэтому при выборе модулей требуется соблюдать осторожность

Чтобы увеличить скорость работы и производительность, используйте минимальное количество динамических модулей, поскольку они уменьшают объем доступной памяти.

Выберите правильный MPM

В Apache используются MPM (мульти-процессинговые модули), которые обрабатывают запросы, приходящие на сервер. Они прослушивают сетевые порты сервера, принимая запросы и создавая дочерние процессы.

MPM бывают двух типов: Prefork и Worker. В MPM Prefork каждый процесс httpd обрабатывает один сетевой запрос. Это более безопасно по сравнению с MPM Worker, но требует большего количества памяти и ресурсов.

MPM – Prefork и Worker

MPM Prefork MPM Worker
Один поток Несколько потоков
Использует больше ресурсов Использует меньше памяти
Отказоустойчив Справляется с большим трафиком

При использовании MPM Worker Apache работает в режиме многопоточного сервера, где каждый отвечает за свой запрос. Этот вариант подходит для обработки большего трафика при ограниченных мощностях сервера.

По умолчанию большинство установок Apache используют модуль Prefork. Он применяется для обработки больших объемов трафика. Вы можете проверить, какой модуль MPM использует ваш сервер при помощи следующей команды:

Определение типа MPM на вашем веб—сервере Apache

В Apache 2.4 появилась поддержка э MPM модуля Event, который может обрабатывать множественные запросы внутри одного потока. Поэтому он работает даже быстрее, чем модуль Worker.

Доступ к файловой базе 1с через интернет в браузере

Теперь перемещаемся на виртуальную машину с nginx. Предварительно не забудьте добавить dns запись в каком-то домене, по которой вы будете ходить в базу через интернет. Она нам нужна, чтобы выпустить бесплатный tls сертификат, чтобы ходить в базу по https. Я не буду привязываться к какой-то конкретной операционной системе и рассказывать, как все делать именно в ней. Систему выбирайте на свой вкус. Настройка будет одинаковой. Нам нужны будут в системе 2 пакета: nginx и certbot. Установите их:

# yum install nginx certbot

или

# apt install nginx certbot

На данную виртуальную машину должны быть проброшены 80 и 443 порты с внешнего ip адреса. Как это будет сделано, зависит от ваших сетевых настроек. В случае с proxmox я настраиваю подобный проброс с самого хоста с помощью iptables. Пример настройки iptables читайте в отдельной статье. Там есть и про проброс. Не буду на этом задерживаться в статье про 1С.

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

# systemctl stop nginx
# certbot certonly

Подробно получение сертификата let’s encrypt с помощью certbot я рассматриваю в статье про . Результатом работы certbot должны быть tls сертификаты в директории /etc/letsencrypt/live. Используем их в настройке виртуального хоста nginx для публикации баз 1С. Создаем в директории /etc/nginx/conf.d/ конфиг 1c.site.ru.conf примерно следующего содержания. Взял его с рабочего сервера.

server {
    listen 443 ssl http2;
    server_name 1c.site.ru;
    access_log /var/log/nginx/1c-access.log;
    error_log /var/log/nginx/1c-error.log;

    ssl_certificate /etc/letsencrypt/live/1c.site.ru/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/1c.site.ru/privkey.pem;

    location /.well-known/acme-challenge/ {
    root /tmp;
    }

    location / {
    auth_basic "Restricted Access";
    auth_basic_user_file /etc/nginx/htpasswd.1c;
    proxy_pass http://10.10.10.11:80;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Proto https;
    }
}

server {
    listen 80;
    server_name 1c.site.ru;
    return 301 https://1c.site.ru$request_uri;
}

В данном случае 10.10.10.11 — локальный ip адрес виртуальной машины с windows, где опубликована база 1С через apache. Доступ к 1С сразу же закрыт отдельным паролем и механизмом веб сервера auth basic. Создадим файл с именем пользователя и паролем, указанным в конфиге.

# htpasswd -c /etc/nginx/htpasswd.1c user1c

Если у вас нет в системе утилиты htpasswd, то установите пакет httpd-tools. Она из него. user1c — имя пользователя. Пароль вам предложат задать в консоли.

Теперь можно запускать nginx и проверять доступ к базе 1с по https с дополнительной авторизацией. Так как в конфиге nginx настроен proxy_pass всех запросов через location / , то на самой виртуалке с 1С вы можете публиковать сколько угодно баз через алиасы, например /buh3, /zup3 и т.д. Все они будут автоматом направляться с nginx на apache. При этом на самом nginx конфигурацию менять не придется.

Вот и все. Можно относительно безопасно выставлять такую конструкцию в интернет. В случае необходимости можно настроить fail2ban, если кто-то надумает перебирать пароли или просто выполнять непонятные запросы к веб серверу с опубликованными базами. При желании в том же nginx с помощью директив allow и deny можно ограничить доступ к виртуальному хосту с базами на уровне ip адресов. Это на случай, если не умеете делать то же самое на фаерволе. В nginx проще и быстрее.

Не забудьте настроить автоматическое обновление tls сертификатов. Как это сделать, я рассказываю в статье с настройкой web сервера. Ссылку на нее я дал выше.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Ваша ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: