Оптимизация хостинга под битрикс, Требования сканера безопасности. Bitrix apache оптимизация
Оптимизация Apache для работы при высоких нагрузках
Оптимизация Apache — настройка веб-сервера, которая требуется для того, чтобы он обслуживал приложение максимально точно соответствуя требованиям к его работе. При высоких нагрузках специальным образом настроив Apache можно добиться максимально быстрой отдачи им контента пользователю.
Ниже приведены основные приемы оптимизации, которые могут положительно сказаться на рабочих характеристиках веб-сервера.
Отключение неиспользуемых модулей
Apache имеет очень богатый функционал и позволяет добиваться различных конфигураций. Функционал подключается за счет модулей. Посмотреть их список можно так:
apache2ctl -M
Loaded Modules: core_module (static) so_module (static) access_compat_module (shared) alias_module (shared) auth_basic_module (shared) authn_core_module (shared) authn_file_module (shared) authz_core_module (shared) authz_host_module (shared) authz_user_module (shared) autoindex_module (shared) cgi_module (shared) deflate_module (shared)
…
php5_module (shared) rewrite_module (shared) setenvif_module (shared) socache_shmcb_module (shared) ssl_module (shared) status_module (shared)
Каждый модуль дает какие-то возможности, но предполагает затрату ресурсов и уменьшение скорости обработки запроса. С нужными модулями Apache может быть скомпилирован сразу, тогда уменьшения производительности не происходит.
Прочитав документацию по модулям стоит определиться какие из них нужны, остальные отключить.
MPM – Multi-Processing Module
Способ работы с клиентскими запросами
Prefork — обрабатывает процессы как самостоятельные сущности, на поступающий запрос от основного процесса создается дочерний
Worker — обрабатывает процессы поточно, каждый запрос обслуживается в отдельном потоке с дочерним процессом
Какой MPM используется можно выяснить той же командой, которая использовалась ранее, но с другим ключем
apachectl -V | grep -i mpm
Server MPM: prefork
Переключение MPM (если Apache собран с поддержкой всех трех) выполняется за счет отключения модуля, подключения другого и перезапуска службы.
Например если нужно сменить prefork на worker:
a2dismod mpm_prefork_module
a2enmod mpm_worker.load
Перезапускаем Apache
/etc/init.d/apache2 restart
Два MPM одновременно использоваться не могут, если пробовать их включить возникнет конфликт. Для каждого можно задавать индивидуальные настройки в /etc/apache2/apache2.conf (для всех mpm в нем есть отдельная секция по умолчанию).
AllowOverride
Для увеличения производительности имеет смысл отключать использование .htaccess за счет AllowOverride
Сжатие
Сжатый контент будет отдаваться значительно быстрее за счет сокращения workload в каждом ответе сервера. Читайте о том, как включить сжатие.
Запросы к DNS
Как любая другая служба, работающая по сети Apache может обращаться к DNS чтобы разрешить доменное имя в IP адрес. Это поведение лучше отключать директивой HostnameLookups Off
В логи при этом будут писаться только IP адреса.
В нагруженных системах от Apache часо отказываются оставляя только Nginx, который тоже специально настраивается.
server-gu.ru
Nginx и Bitrix. Использование их без использования апача. |
Встала тут задача поднять сервер, исключительно под сайты, написанные на базе CMS Bitrix (в силу тормознутости этой CMS, дабы своей прожорливостью она не портила жизнь всем остальным сайтам), и чтобы по максимуму быстро отдавать содержимое Bitrix-овских сайтов, решил, что Apache на сервере нафиг не нужен и что nginx-а будет вполне достаточно. Избавится от апача я решил, не потому, что имею к нему какие то притензии, а по двум причинам, во-первых, для быстрой отдачи статики все равно использоватьnginx удобней, а во-вторых, на первом серевере у меня уже использовался nginx в качестве проксирующего сервера, но поскольку админ, ответственный за добавление сайтов, не парился над тем, чтобы прописывать для сайтов в конфиге nginx-а папки со статикой, получилось, что в нем срабатывал конфиг по умолчанию, который, естественно, не знал где эта статика лежит и все равно все запросы переадресовывал апачу. То есть выйгрыш был только на отдаче больших файлов, в этом случае nginx просто отпускал apache, а сам сидел на раздаче контента конечному пользователю. И чтобы не плодить лишних конфигов (к сожалению, структура сайтов была разной и написать один универсальный конфиг для всех не представляется возможным), я решил просто убрать apache вообще. Сказано, сделано. Apache даже не ставился (единственное, что от него было поставлено — это ab для анализа производительности), а к nginx-у PHP был прикручен как FastCGI, благо описаний, как это сделать, в интернете было много. Итак, ставлю тестовый сайт на Bitrix-е — и все работает. Ну вот, думаю, счастье есть. Все, можно отдыхать. Но не тут то было. Мне просто повезло, что этот сайт был без ЧПУ и mod_rewrite от apache там просто не задействовался. Но вот, ставят сайт с ЧПУ и началось. Типовое содержимое .htaccess Битрикса для реализации ЧПУ выглядит следеющим образом:
Гугление и чтение доки на сайте nginx-а показало, что конструкция
location / { root /home/www/domain.name/public_html; index index.php index.html index.htm; if (!-e $request_filename) { rewrite ^(.*)$ /bitrix/urlrewrite.php last; } }легко и непринужденно заменяет всю пачку Apach-евских инструкций для реализации ЧПУ. Но всплыло одно НО. Битрикс после добавления товара в корзину, делает редирект на страницу товара, но не просто на ту же папку, а с какого то перепугу, дописывает в конец пути index.php. То есть, если путь к товару был, к примеру,/e-store/xml_catalog/1067/38608/, то после добавления его в корзину, Битрикс перенаправляет посетителя на/e-store/xml_catalog/1067/38608/index.php. И, ахтунг !!!, if (!-e $request_filename) совершенно игнорирует тот факт, что такой директории не существует, и понятное дело, что в несуществующей директории index.php ну никак не может быть. В итоге, срабатывает описание для файлов PHP:
location ~ \.php$ { fastcgi_pass 127.0.0.1:1026; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /home/www/domain.name/public_html$fastcgi_script_name; include fastcgi_params; }И поскольку такого файла то нет, мы получаем ошибку: No input file specified. Чтобы избежать этого, пришлось вставить проверку на существование файла c расширением php в само описание обработчикаFastCGI, и если такого файла не существует, делать редирект на URL, но уже без файла:
location ~ \.php$ { root /home/www/domain.name/public_html; if (!-f $request_filename) { rewrite ^(.*)/index.php$ $1/ redirect; } fastcgi_pass 127.0.0.1:1026; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /home/www/domain.name/public_html$fastcgi_script_name; include fastcgi_params; }Еще несколько тонкостей — поскольку мы не знаем, существует ли сама директория, то нам надо запускать процесс анализа полученного урла заново, и чтобы это произошло, надо использовать именно флаг redirect, а не last или break. Во-вторых, Битрикс, как выяснилось очень привередлив к наличию слеша в конце URL, и если его там нет, он игнорирует значение последней директории в пути, что приводит к поднятию на уровень выше. То есть если вместо rewrite ^(.*)/index.php$ $1/ redirect; написать rewrite ^(.*)/index.php$ $1 redirect; — вместо описания товара мы попадаем на уровень выше, то есть на список товаров в данной категории.
http://expo-vpa.ru/
www.jajjja.com
Оптимизация хостинга под битрикс, Требования сканера безопасности
Сканер безопасности 1С-Битрикс достаточно требовательная к хостингу штука. Замечу, требования адекватные по большей части. Не все из них могут быть выполнены без вашего участия, в связи с относительностью путей к некоторым директивам и т. д. И не на все их них существует достаточное описание к устранению. А главное у вас должен быть достаточно широкий перечень доступов к серверу и понимание, что и куда следует писать. Давайте разберем некоторые из них:
- Стартовая конфигурация сервера nginx(прокси)+apache сервер
- Панель управления ispconfig3 дописанный под nginx
- php 5.4.14 актуальная на данный момент в стабильном репозитории.
- Представление php FastCGI/apache
Убрать все предупреждения по безопасности сайта, сдать все тесты полностью на 100%
Предварительно сервер уже подстроен под 1С-Битрикс и достаточно существенно, поскольку на нем уже не первый год лежат данные сайты. Однако нет места совершенству и мы задались мыслью отработать все предупреждения систем безопасности 1С-Битрикс. Вот некоторые из них:
Используется опасная/устаревшая версия php
Первое на что мы обратим внимание, как на критическое замечание «php опасная устаревшая версия». Тут после переписки со службой поддержки и просьбы понизить требуемый уровень php до реально существующих в стабильных ветках репозиториев ни к чему не привели;(
В общем в этом вопросе кина не будет. для устранения данного требования придется обновлять php с нестабильной ветки репозиториев или собирать ручками. В дальнейшем разумеется таким же способом. В моем случае я доставил дополнительную версию php 4.5 дабы менять их можно будет с админки хостинга, а к 5 версии претензий битрикс не имеет.
Разрешено чтение файлов по URL (URL wrappers)
allow_url_fopen = Off прописываем сразу в php.ini, поскольку ispconfig3 работает по умолчанию с представлением php FastCGI, и мы не сможем php_value прописать в .htaccess.
В случае php.ini, вид представления php не имеет значения. Если же вы используете другую панель управления, обратите внимание что в deb семействе 3 конфига php.ini, вписывайте директивы в соответствующей или можно сделать проще:
find /etc/php5 -name 'php.ini' -exec sed -i 's/allow_url_fopen = On/allow_url_fopen = Off/g' "{}" \; /etc/init.d/apache2 restartВключить веб-антивирус
Включение веб-антивируса в 1С-Битриксauto_prepend_file. Поскольку мы редактируем php.ini то недурно будет сразу кинуть в него и веб-антивирус. В моем случае это:
auto_prepend_file = /var/www/medver.ru/web/bitrix/modules/security/tools/start.phpПуть требуется изменить на ваш. Сами понимаете хостер за вас этого не сделает. Поскольку он не знает какой вы используете движок. В моем же случае, мы допишем в генератор php.ini
Разрешено отображение сайта во фрейме с произвольного домена
add_header X-Frame-Options SAMEORIGIN; — добавляем данную строчку в nginx, так как nginx стоит на выходе (для битрикса принципиален front-end). Если мы поставим его на apache толку не будет. По-хорошему, строку нужно закинуть в оба конфига. В админке ispconfig3, если вы ставили по моему мануалу, просто саму директиву. Если вы создавали конфиги руками (читай, сами), то вписываем строку в server, а не location.
server { add_header X-Frame-Options SAMEORIGIN; }Включен Automatic MME Type Detection
Аналогичная ситуация, поскольку директива Header set X-Content-Type-Options nosniff. C того же модуля можно вписать их вместе.
Для apache2:
<IfModule headers_module> Header set X-Content-Type-Options nosniff Header set X-Frame-Options SAMEORIGIN </IfModule>В Nginx просто вписываем рядом.
Server { add_header X-Content-Type-Options nosniff; add_header X-Frame-Options SAMEORIGIN; }htaccess файлы не должны обрабатываться Apache в директории хранения загружаемых файлов
Теперь чуть посложней. Исключив .htaccess в папке upload, мы автоматически получим дополнительную ошибку, исполняются php файлы, по сему нам придется перенести весь .htaccess из папки upload в apache, а для этого нам придется явно указать папку в которой будет работать это правило, поскольку в .htaccess этого не требовалось. В противном случае мы запретим исполнение php файлов на всем сайте.
<Directory /var/www/medver.ru/web/upload> AllowOverride none <IfModule mod_mime.c> <Files ~ \.(php|php3|php4|php5|php6|phtml|pl|asp|aspx|cgi|dll|exe|shtm|shtml|fcg|fcgi|fpl|asmx|pht|py|psp|rb|var)> SetHandler text/plain ForceType text/plain </Files> </IfModule> </Directory>PHP скрипты выполняются в директории хранения загружаемых файлов
Собственно, ошибка появляется когда вы отключили .htaccess в папке upload решение смотрим выше, поскольку оно решает две проблемы сразу. В результате у меня получилось следующее:
Теперь рассмотрим как это сделать для всех сайтов одновременно.
Добавим настройки для nginx
vim /usr/local/ispconfig/server/conf/nginx_reverse_proxy_plugin.vhost.conf.masterнаходим строчку include /etc/nginx/locations.d/*.conf; и вставляем перед ней код. Должно получиться так:
#для битрикс монитора add_header X-Content-Type-Options nosniff; add_header X-Frame-Options SAMEORIGIN; include /etc/nginx/locations.d/*.conf;Далее добавляем apache2в генератор хостов
vim /usr/local/ispconfig/server/conf/vhost.conf.masterПо той же схеме вставляем внизу конфига дополнительный кусок. Но уже с переменными, поскольку нам требуется путь до сайта.
<IfModule headers_module> Header set X-Content-Type-Options nosniff Header set X-Frame-Options SAMEORIGIN </IfModule> <Directory {tmpl_var name='web_basedir'}/{tmpl_var name='domain'}/web/upload> AllowOverride none <IfModule mod_mime.c> <Files ~ \.(php|php3|php4|php5|php6|phtml|pl|asp|aspx|cgi|dll|exe|shtm|shtml|fcg|fcgi|fpl|asmx|pht|py|psp|rb|var)> SetHandler text/plain ForceType text/plain ;</Files> </IfModule> <IfModule mod_php5.c> php_flag engine off </IfModule> </Directory>Дополнительно, по ходу дела, тестируя работоспособность скриптов на разных сайтах, пришлось докинуть директиву во все php.ini
session.entropy_file = /dev/urandom session.entropy_length = 128klondike-studio.ru
Оптимизация ISPmanager под проекты на Битриксе или как я скрестили ISPmanager и VMBitrix (Битрикс окружение) / СоХабр
Возможно вы уже знакомы с таким продуктом, как «1С-Битрикс: Веб-окружение» — Linux. Очень часто это идеальное решение для проектов на базе CMS «Битрикс», но, иногда, чисто «консольное» меню не обладает необходимым функционалом для людей, работающими над проектами.
Для примера, другой популярный продукт — ISPmanager, позволяет создавать FTP аккаунты из удобной веб-панели для администраторов всего за пару кликов мышкой, в то время как из консоли вам необходимы навыки администратирования Linux. Порой просто хочется управлять своим сервером и проектами из вкладки в браузере, без помощи ssh консоли.
Однако, ISPmanager, в нашем случае его последняя версия под номером пять, не готов «из коробки» работать с сайтами на Битрикс, не говоря уже о Битрикс24, корпоративных порталах. Часть функционала недоступна, проекты работают довольно медленно. Приходится долго время изучать рекомендации из документации по Битриксу, которая, к сожалению, иногда сильно запаздывает с обновлением актуальной информацией.
В связи с необходимым требованием работать с проектами через "user-friendly" интерфейс ISPmanager 5 и не потерять в скорости и функционале проектов, было принято решение о неком «скрещивание» этих двух систем.
Сценарий установки протестирован только на чистой CentOS 6.6 x64_86, сразу после установки стабильного ISPmanager 5 и включения в нём «Возможности» nginx. Для продвинутых пользователей, желающих использовать предложенное решение, которые ранее модифицировали какие-либо настройки в своей системе, категорически не рекомендуется устанавливать скрипты полностью в автоматическом режиме — выполняйте инструкции из них вручнуюАвтор не даёт никаких гарантий по стабильной или правильной работе предложенного решения. Все инструкции вы выполняете на свой страх и риск. Текущее версия скриптов и конфигурационных файлов находится на этапе активного тестирования Внимательно ознакомитесь с разделом «Этап 2.6 Создания дополнительных необходимых каталогов»Модуль «компрессия» в системе должен быть обязательно УДАЛЁН. Композит — ВЫКЛЮЧЕН.Композит HTTPS Красивые сообщения об ошибках веб-сервера
Для вашего удобства, всё решение оформлено в полностью автоматические скрипты и заранее подготовленные конфигурационные файлы.
Рассматривается следующий сценарий:
- Вы установили чистую CentOS 6.6 x86_64
- Установили ISPmanager 5, следуя официальным инструкциям
- В разделе «Возможности» панели ISPmanager 5 активировали Nginx
Далее можно приступать к самой оптимизации: (все ссылки в конце публикации)
- сначала запускаем «bitrix-env_5.1.2_patched_2.sh»
- копируем скрипт «isp_patch_V0.1.sh» вместе с распакованным архивом «patch_filesV0.1.zip» в произвольную директорию на сервере
- запускаем «isp_patch_V0.1.sh»
Поздравляю, ваш сервер с ISPmanager 5 готов для работы с проектами на Битрикс
Осталось только развернуть сайт на свежем домене: (все ссылки в конце публикации)
- Предложенный мною вариант о том, как это можно сделать, в отдельной, но небольшой инструкции "создание хоста.pdf" (в любом случае, обратите внимание на подключение необходимого конфига apache и nginx к созданному хосту)
- Для вашего удобства, выкладываю дистрибутив для установки битрикса в архиве "bitrix_install.zip" (установка в таком случае происходит в режиме Быстрая установка/Short install)
Буду рад любым вашим комментариям, замечаниям и пожеланиям!
Этап 1. bitrix-env.sh (или «1С-Битрикс: Веб-окружение» — Linux)
Классическая установка битрикса происходит на битрикс-окружение, которое устанавливается через скрипт www.1c-bitrix.ru/products/env/ Именно с разбора bitrix-env.sh мы и начнём оптимизацию своего ISPmanager На самом деле в самом скрипте ничего особенного нет, сначала идёт стандартная проверка дистрибутива системы, затем по результатам этой проверки устанавливается то или иное необходимое ПО. Вся магия происходит, когда скрипт добавляет «фирменный» репозиторий 1С-Битрикс и устанавливает в систему пакет bitrix-env* и bx-nginx, на них мы заострим своё внимание.
И так, наш "bitrix-env_5.1.2_patched_2.sh" ничто иное, как немного переделанный скрипт от самого 1С-Битрикс, но основная «фишка» в установке bitrix-env из него убрана, почему — расскажу дальше.
Этап 2. bitrix-env.rpm (или Основной этап конфигурации)
Целая экосистема, которую предлагает bitrix-env, нам не подходит, нагромождения потенциально конфликтующих пакетов/конфигов ISPmanager и Битрикс-окружения нам вовсе ни к чему.
Оставив только нужно на мой взгляд я перенёс всё из rpm пакета в скрипт isp_patch.sh (внимание, протестирован только на centos 6.6 x64).
Немного подробнее — далее.
Этап 2.1 bx-nginx (или Nginx с поддержкой Push & Pull)
Этот пакет, который нам предлагает Битрикс-окружение, является ничем иным, как скомпилированным nginx с модулем «push and pull», который применяется в таком функционале как, например, «Бизнес-чат», «Живые комментарии», «Видеозвонки», «Мобильное приложение».
Мы можем просто забрать себе в систему, любезно скомпилированный 1С-Битрикс, готовый бинарник nginx на свою машину с ISPmanager и избавить себя от необходимости компилировать его самостоятельно (22 и 23 строки скрипта)
Этап 2.2 bvat.bx (или автотюнер параметров ПО)
интересным составляющим «Битрикс-окружения» является скрипт bvat.bx, который прописывается в автозагрузку системы и выполняет работу по тюнингу параметров ПО, отвечающее за работу проекта (преимущественно mysql сервера и расходу оперативной памяти). Сам тюнер работает довольно просто, основываясь на текущей конфигурации системы он выставляет тот или иной заготовленный «пресет» настроек в качестве действующих параметров. Хотелось бы заметить, что в конфигурации предусмотрено изменения параметров, которые выставил bvat.bx без полного его отключения (хотя можно поступить и так).
в нашем скрипте за его установку отвечают строки 25-31
Аналогично эталонному Битрикс-окружению, свои собственные параметры для mysql сервера можно прописать в файле /etc/mysql/conf.d/z_bx_custom.cnf (которые будут применены в обход bvat.bx). Аналогично, подключением своих конфигурационных файловпосле конфигурационных файлов bvat, можно обойти его автонастройки для остального ПО, если тот или иной параметр, выставленный автоматически, вас не устраивает.
Так как логика скрипта мне по-душе, дополнить его «автоматику» своими значениями не составляет труда, а его установка в систему была довольна проста — я включил его в свою конфигурацию.
Этап 2.3 Настройки php
Изменяем несколько параметром в php.ini (строки 33-40 в нашем скрипте)- memory_limit = 512M
- pcre.backtrack_limit = 1000000
- short_open_tag = On
Этап 2.4 Настройки mysql
42-48 строки скрипта копируют заранее подготовленный и настроенный my.cnf, в котором вы, наверняка захотите что-нибудь поменять уже самостоятельно
Этап 2.5 bitrixenv.ini (или директивы php необходимые для работы битрикса)
Неотъемлемой частью классического битрикс-окружения является файлик /etc/php.d/bitrixenv.ini, содержащий необходимые настройки директив, перечисленные в нём
с минимальной разницей с оригинальным файлом я скопирую его на свою машину с ISPmanager, как файл /etc/httpd/bx/bx_apache.conf (строки 50-52)
важно заметить, что этот файлик мы нигде не инклюдим намеренно, чтобы прописывать его при необходимости только отдельным Virtualhost созданных из-под ISPmanager (в секцию конфиг-apache)
Этап 2.6 Настройка nginx
Настройки nginx в моём скрипте имеют долю «автотюна» (строка 64 и 67) Остальное взято из конфигурационных файлов для nginx от Битрикс-окружения
строки 72-77 отвечают за компрессию на уровне сервера 79-82 — за push&pull
обратите внимание, на файл bx/conf/bitrix.conf важно заметить, что этот файлик мы нигде не инклюдим намеренно, чтобы прописывать его при необходимости только отдельным хостам, созданных из-под ISPmanager (в секцию конфиг-nginx)
кроме того, в нём есть блок «Some security options» с заранее подготовленными, но закоментированными опциями, имеющими отношения к безопасности хоста
Этап 2.7 Создания дополнительных необходимых каталогов
В скрипте (строки 13-19) создаются каталоги для хранения сессий и временных файлов битриксом.
Внимание, «по-умолчанию» на каталоги выставляются полные права на запись и чтение для всех пользователей на сервере и из одного хоста (сайта) с помощью скриптов можно запросто вытянуть данные с другого сайта. Подобная конфигурация является небезопасной, чтобы исправить это, можно поступить двумя способами:
1) включить хранение сессий в разделе админки «БД: Защита сессий» и создать отдельные каталоги только для временных файлов
2) либо создать отдельные два каталога (отдельные для сессии и для временных файлов), например
mkdir -p /tmp/php_sessions/ext_www/your_site.ru mkdir -p /tmp/php_upload/ext_www/your_site.ru выставить на них права только того пользователя, которыми они принадлежат chown user_of_yoursite:user_of_yoursite /tmp/php_sessions/ext_www/your_site.ru -R chown user_of_yoursite:user_of_yoursite /tmp/php_php_upload/ext_www/your_site.ru -R и прописать в конфигурацию your_site.ruphp_admin_value session.save_path /tmp/php_sessions/ext_www/your_site.ru php_admin_value upload_tmp_dir /tmp/php_upload/ext_www/your_site.rubitrix-env_5.1.2_patched_2.shbitrix_install.zipсоздание хоста.pdfisp_patch_V0.1.shpatch_filesV0.1.zipsohabr.net
Оптимизация производительности Apache — Linux портал
Apache — популярный веб-сервер в интернет, он обслуживает неограниченное количество серверов и сайтов. Часто возникает необходимость прирастить производительность веб-сервера. Наверное лучший способ это сделать — перейти к схеме frontend+backend, но это может потребовать достаточно грозных конфигураций в приложении (например, у вас наверняка отвалятся всяческие индикаторы прогресса аплоада файлов . Другой способ — просто прирастить производительность сервера — поставить более быстрый процессор и больше памяти. Да и 1-ое и 2-ое просит много времени и ресурсов, так что на 1-ое время можно испытать ускорить apache способом оптимизации его конфигурации. Есть оптимизации, которые можно применить только при пересборке apache, другие же можно использовать без перекомпиляции сервера.Загружайте только нужные модули
Apache — модульная программа, большая часть функций которой реализуется в модулях. При всем этом эти модули могут быть как вкомпилированы, так и собраны в виде DSO — динамических библиотеках. Большая часть современных дистрибутивов поставляет apache с набором DSO, так что не нужные модули можно просто отключить без перекомпиляции.Запускайте apache только с необходимыми модулями, чтобы уменьшить потребление памяти. Если вы решили скомпилировать apache без помощи других, то либо тщательно подходите к выбору списка модулей, которые вы включите, либо компилируйте их как DSO используя apxs в apache1 и apxs2 в apache2.
Для того чтобы отключить ненужные DSO-модули, достаточно закомментировать лишние строчки LoadModule в httpd.conf. Apache со статически скомпилированными модулями будет потреблять чуть меньше памяти, но для вас придется каждый раз его перекомпилировать для конфигурации списка модулей.
Выберете подходящий MPM
В apache каждый запрос обрабатывается в своем процессе или потоке. При компиляции apache позволяет выбирать один из нескольким MPM (Multi-processing module), которые отвечают за прослушивание портов, прием запросов и раздачу этих запросов дочерним процессам или потокам, в каких эти запросы будут обработаны.Выбор MPM зависит от нескольких обстоятельств, таких как наличие поддержки потоков в ОС, количества свободной памяти, также требований стабильности и безопасности.Если безопасность очень принципна, следует выбрать peruser MPM, пожертвовав производительностью.Если принципна непосредственно производительность, то выбор ограничивается 2-мя mpm: prefork и worker.Worker - поточный MPM, т.е. в нем каждый запрос обслуживается в отдельном потоке 1-го из дочерних процессов. Потоки — более легкие для ОС объекты, чем процессы, они более отлично употребляют память и переключения контекста для их происходят быстрее. Но, из-за того что каждый поток имеет доступ ко всей памяти процесса, worker mpm более подвержен сбоям: сбой 1-го потока может повлечь падение всего процесса, в каком находился этот поток (именно поэтому worker mpm запускает несколько дочерних процессов с несколькими потоками в каждом).
1С
Perfork - mpm употребляет несколько дочерних процессов, каждый дочерний процесс обрабатывает одно подключение. Из-за того что процесс — более тяжелая структура, он употребляет малость больше ресурсов, зато он менее подвержен сбоям — обработка каждого отдельного запроса не зависит от других процессов. К огорчению, для смены mpm требуется перекомпиляция apache. Тут проявляют свои плюсы source-based дистрибутивы: вы можете просто перекомпилировать apache и все зависимые от него пакеты, не превратив систему в свалку. Бинарные дистрибутивы выходят из этой ситуации по-разному.Например в RHEL в apache rpm находится слету две версии apache — с worker и prefork mpm (prefork употребляется по умолчанию). Но worker mpm не поддерживает php. Так что если вы желаете php и worker mpm для вас придется компилировать его без помощи других либо отыскивать посторонние репозитории.
DNS lookup
Директива HostnameLookups включает reverse DNS запросы, так что в логи будут попадать dns-хосты клиентов вместо ip-адресов. Разумеется, что это существенно замедляет обработку запроса, т.к. запрос не обрабатывается пока не будет получит ответ от DNS-сервера. Поэтому смотрите чтобы эта директива всегда была выключена (HostnameLookups Off), а если для вас все-таки нужны dns-адреса, вы можете узнать их позже, прогнав лог в утилите logresolve (которая поставляется с apache).Не считая того, смотрите чтобы в директивах Allow from и Deny From использовались ip-адреса а не доменные имена. По другому apache будет делать два dns запроса (обратный и прямой) чтобы убедиться что клиент-тот за кого себя выдает.
Встреча BAFPUG 2011-11-05
AllowOverride
Если директива AllowOverride не установлена в ‘None’, apache будет пробовать открыть .htaccess файлы в каждой директории которую он посещает и во всех директориях выше нее. Например:
DocumentRoot /var/www/html <Directory /var/www/html/> AllowOverride all </Directory>Если будет запрошен /index.html, apache попробует открыть (и интерпретировать) файлы /.htaccess, /var/.htaccess, /var/www/.htaccess, и /var/www/html/.htaccess. Это увеличивает время обработки запроса. Так что, если для вас нужен .htaccess только для одной директории, разрешайте его только для нее:
DocumentRoot /var/www/html <Directory /> AllowOverride None </Directory> <Directory /var/www/html/> AllowOverride all </Directory>FollowSymLinks и SymLinksIfOwnerMatch
Если для директории включена функция FollowSymLinks, сервер будет следовать по символическим ссылкам в этой директории. Если для директории включена функция SymLinksIfOwnerMatch, apache будет следовать по символическим ссылкам только если владелец файла или директории, на которую указывает эта ссылка совпадает с владельцем обозначенной директории. Так что при включенной функции SymLinksIfOwnerMatch apache делает больше системных запросов.Не считая того, дополнительные системные запросы требуются когда FollowSymlinks НЕ УСТАНОВЛЕН. Т.о. более наилучшая ситуация для производительности — когда функция FollowSymlinks включена.
Content Negotiatio
Пытайтесь избегать content negotiaion.
MaxClients
Директива MaxClients устанавливает наибольшее количество параллельных запросов, которые будет поддерживать сервер. Apache не будет порождать больше процессов/потоков чем MaxClients.
Значение MaxClient не долно быть очень маленьким (по другому много клиентов останутся необслуженными), ну и не стоит устанавливать очень неограниченное количество — лучше не обслужить часть клиентов чем исчерпать все ресурсы, залезть в своп и умереть под нагрузкой. Хорошим может быть значение MaxClients = количество памяти выделенное под веб-сервер / больший размер порожденного процесса или потока. Для статических файлов apache употребляет около 2-3 Мб на процесс, для динамики (php, cgi) — зависит от скрипта, но обычно около 16-32 Мб.
Если сервер уже обслуживает MaxClients запросов, новые запросы попадут в очередь, размер которой устанавливается с помощью директивы ListenBacklog.
MinSpareServers, MaxSpareServers, и StartServers
Т.к. создание потока, и в особенности процесса — дорогая операция, apache делает их заранее. Директивы MaxSpareServers и MinSpareServers устанавливают как много процессов/потоков должны ожидать в готовности принять запрос (максимум и минимум).
Если значение MinSpareServers очень наимельчайшее и в один момент приходит много запросов, apache должен будет создавать много новых процессов/потоков, что создаст дополнительную нагрузку в этой стрессовой ситуации. С другой стороны, если MaxSpareServers очень велико, apache будет очень нагружать систему этими процессами, даже если количество клиентов не много.Постарайтесь установить такие MinSpareServers и MaxSpareServers, чтобы apache не создавал более Четыре процессов/потоков в секунду. Если он создаст более 4, в ErrorLog будет помещено сообщение об этом. Это — сигнал того что MinSpareServers очень не довольно.
MaxRequestsPerChild
Директива MaxRequestsPerChild устанавливает сколько запросов может обработать один дочерний процесс/поток до того как он будет завершен. По умолчанию значение этой директивы установлено в 0, что означает что однажды изготовленный процесс/поток не будет завершен никогда (ну не считая случаев остановки сервера или краха этого процесса/потока).
Рекомендую установить MaxRequestsPerChild равное какому-нибудь достаточно большому числу (несколько тысяч). Это не создаст излишней нагрузки, связаной с тем что apache будет должен создавать новые дочерние процессы, в то же время это поможет избавиться от заморочек с утечкой памяти в дочерних процессах (что очень может быть например если вы используете нестабильную версию php).
KeepAlive и KeepAliveTimeout
KeepAlive позволяет делать несколько запросов в одном TCP-подключении. Это в особенности полезно для html-страниц с множеством изображений.
Если KeepAlive установлен в Off, то для самой страницы и для каждого изображения будет создано отдельное подключение (которое нужно будет обработать master-процессу), что плохо и для сервера и для клиента. Так что для похожих случаев рекомендуется устанавливать KeepAlive в On.
Для других применений (например для download-сервера) KeepAlive может быть бесполезен и даже вреден, т.к. при включенном KeepAlive сервер закрывает соединение не слету, а ждет KeepAliveTimeout секунд нового запроса. Для того чтобы процессы не висели очень продолжительно в бесполезном ожидании, устанавливайте KeepAliveTimeout достаточно малым, около 5-10 секунд обычно достаточно.
Сжатие
HTTP-сжатие было определено в образце HTTP/1.1, и сейчас все современные клиентские программы и практически все сервера его поддерживают. Сервер может отдавать ответ в gzip или deflate, а клиентская программа незаметно для пользователя разжимает данные. Это уменьшает количество передаваемого трафика (до 75%), но естественно наращивает внедрение процессора.Но если ваш сервер посещает много клиентов с медленным подключение, сжатие может снизить нагрузку с вашего сервера из-за того что сервер сможет быстрее передать сжатый ответ и вызволить ресурсы, занятые дочерним процессом. В особенности очень этот эффект может быть заметен если у вас быстрый процессор, но не довольно памяти.Кеширование меняется директивами модуля mod_deflate. Имейте в виду, что не следует устанавливать степень сжатия gzip более 4-5 — это потребует существенно большего времени CPU, а эффект будет достаточно невелик. Ну и разумеется не нужно пробовать сжать изображения в jpg, gif и png, музыку, видео файлы и все другие бинарные файлы, которые уже и так отлично сжаты.
Кеширование на стороне клиента
Не забывайте устанавливать Expires заглавия на статические файлы (см. модуль mod_expires). Если файл не изменяется, то его всегда следует испытать закешировать на клиенте. Тогда у клиента будут быстрее загружаться страницы, а сервер освободится от лишних запросов.
Отменная статья, перепечатал с сайта Highload Web.Читаем еще:
- Скрипт для оптимизация производительности Mysql
- AWStats анализатор логов для статистики
- FTP сервер на базе vsftpd и MySQL в Debian (Ubuntu)
- Внедрение mod_macro для конфигурации виртуальных хостов Apache
- Проверка Linux сервер на предмет взлома
Похожие статьи
-
Скрипт для оптимизации Mysql
Скрипт, который может в выявлении проблемных мест конфигурации сервера mysql, и даст полезные советы по оптимизации. Скрипт написанный на языке perl и не просит установки. Его просто нужно ск...
-
Внедрение mod_macro для конфигурации виртуальных хостов Apache
Лёгкое добавление новых виртуальных хостов в apache, в чём нам поможет модуль mod_macro.Установка для debian ubuntu mod_macro и включения.$ sudo apt-get install libapache2-mod-macro$ sudo a2enmod...
-
Установка и настройка сервера на базе Debian
Эта статья не претендует на полный и расширенный howto, просто для собственного же удобства решил все свои заметки, записки соединить воедино и пользоваться как шпаргалкой, может быть будут вст...
-
SSH для обыденных смертных
В сети много документов по настройке удалённого управления в Линукс и БСД-системах, но часто в их умалчиваются простые (после прокуривания мануалов и гуглежа) вещи. Непосредственно о их я расскаж...
-
Rsync утилита для быстрого удаленного или локального копирования файлов
Rsync разработан для замены rcp – старенькой программы для удаленного копирования под Unix. Благодаря широким возможностям синхронизации и передачи файлов, rsync часто применяется для сотворения з...
hpunix.org
Оптимизация сервера под Битрикс | Apache | Linux
Необходимо оптимизировать сервер для CMS БИТРИКС редакция Стандарт.
«1С-Битрикс: Веб-окружение» установленное на этот сервер выдавало производительность 150 попугаев.
Но у нас другие условия.
Исходные данные:
- CPU i7-4770 RAM32 ГБ DDR3 2 x 240 ГБ SATA 6 Гбит/с SSD (Soft RAID)
- Ispmanager 5 pro (Nginx+Apache)
- CloudLinux 7
Требования:
- Функционал Ispmanager 5 pro должен быть полностью сохранен.
- CMS БИТРИКС Стандарт должен показывать индекс производительности свыше 120
Квалификация: Apache, Linux, Nginx
Показать больше nginx 0.7, nginx apache, convert nginx apache, linux, wordpress magento nginx apache, nginx apache optimization, nginx apache traffic, nginx apache traffic server, nginx apache magento, nginx apache mod rewrite, nginx apache freebsd, freebsd nginx apache php mysql
( 0 отзыв(-а, -ов) ) Dnipropetrovsk, UkraineID проекта: #9181724
www.freelancer.com.ru