Голямо ръководство част 18
За да може apache да работи с nginx, той трябва да бъде малко конфигуриран. Е, в същото време леко ще оптимизираме работата му по отношение на „поглъщане на паметта“. Първо, трябва да стартираме отново Apache. Деактивирахме го, когато инсталирахме nginx. По подразбиране и Apache, и nginx слушат на порт 80. Но ние се нуждаем от Apache, за да работим заедно с nginx, докато nginx слуша портове по подразбиране и може да отиде до Apache, за да обработи онези заявки, които самият nginx не може да обработи. За да направим това, трябва да модифицираме файла/etc/apache2/ports.conf. Файлът след нашите игриви дръжки трябва да изглежда така (всичко, което беше там, можете спокойно да го свалите):
ИмеVirtualHost 127.0.0.1:81 Слушай 127.0.0.1:81
Тези модули са в пакетите apache2 (remoteip) и libapache2-mod-rpaf. Със сигурност имате първата опаковка и проверете втората за всеки случай - може да е изгубена. Активиране на модули (може да се закълне, че модулът вече е активиран - добре, добре):
#a2enmod rpaf
#a2enmod remoteip
Трябва също да създадете файл/etc/apache2/conf-available/remoteip.conf
Също така е важно да активирате mod_rewrite. Всъщност htaccess за популярния cms се състои малко повече от изцяло от параметрите, които използват този конкретен модул. По някаква причина в някои версии на пакета Apache той е изключен по подразбиране - включително днес, когато пиша статия (самият модул е в пакета apache2):
#a2enmod rewrite
Тук сме готови с минимална настройка, apache ще работи правилно. Всичко, което следва в тази статия, е малка настройка. След това трябва да правите всичко внимателно, ако не разбирате за какво е -не го правете. Ако глупаво копирате и поставите по-нататък, тогава има шанс да получите неработещ Apache.
ЗаНеопитните администратори на това място трябва просто да рестартират Apache и да продължат към следващата статия:
#apachectl рестартиране
#/etc/init.d/apache2 рестартирайте
Основният (за моя вкус - единственият значим) обрат на Apache по темата за разходите за производителност / ресурси е броят на изпълняваните процеси. В Apache 2.4, за режима на работа на MPM Prefork (а именно ние го използваме, тъй като използваме MPM-ITK), опаковани в Debian8, техният номер е конфигуриран във файла/tc/apache2/mods-available/mpm_prefork.conf to в mpm prepork, apache Това не е най-бързият режим на работа, особено ако нямате безплатни процеси, най-интензивният памет, но наистина се нуждаем от mpm-itk - това е най-универсалният режим на работа. Можете да използвате MPM worker (той е по-икономичен по отношение на паметта), но тогава няма да можем да изпълняваме различни влизания от името на различни потребители. От друга страна, при съвременните мивки без инструменти разликата изобщо не се вижда. В debian7 и по-стари, тези опции бяха точно в/etc/apache/apache2.conf (някъде по-близо до горната част на файла). Всъщност, независимо в коя конфигурация са тези параметри, трябва да потърсим нещо подобно:
StartServers - броят процеси при стартиране на Apache.MinSpareServers - минималният брой "свободни" (незаети с обработка на директна заявка) процесиMaxSpareServers - максималният брой "свободни" процеси.MaxRequestWorkers - максималният брой процеси, които apache може да стартираMaxConnectionsPerChild - броят заявки на процес, след което процесът се рестартира независимо от броя на процесите
Цифрите по-горе са по подразбиране (поне в deb8). Стартираме 5 процеса, уверете се, че имаме поне 5 свободни процеса, ако има повече от 10 свободни, започваме да ги убиваме. Ако работят общо 150 процеса, ние спираме стартирането на нови, каквото и да се случи. Е, автоматичното рестартиране на процесите е деактивирано. Сега за това как да настроите. Един процес заема приблизително 10 мегабайта памет. Това означава, че в конфигурацията по подразбиране Apache може да консумира не повече от един и половина гигабайта памет (с такова потребление на памет може да обслужва до 150 едновременни заявки. За всеки случай, позволете ми да ви напомня, че „заявката“ в нашата конфигурация е времето, прекарано в генериране на страницата от Apache. Дори ако бавен клиент дойде за страницата (от мобилен телефон, например), nginx пак ще изтегли тази страница веднага след като бъде генерирана почти моментално и ще го даде на бавния клиент толкова, колкото му трябва. И процесът на Apache ще бъде безплатен. И разбира се, глупаво отворените страници в браузъра не са "едновременни" заявки, ако в момента нищо не се зарежда от Apache на страницата). Минималното потребление на памет е 60 мегабайта за работници (веднага щом поне някаква заявка дойде до Apache, той ще стартира 6-ия процес във фонов режим, така че да има 5 свободни) + 25 за главния процес. В резултат на това, ако имате един и половина гигабайта свободна памет на сървъра след инсталирането на целия софтуер, можете да нахраните кучето и да не правите нищо. Най-вероятно Apache никога няма да има нужда от тях. Ако изпитвате липса на памет, тогава трябва да намалите числото MaxRequestWorkers, така че системата да не остане без памет. Ако имате много памет - тогава можете да завъртите числата MaxSpareServers и MaxRequestWorkers нагоре (разбира се, ако имате съответния брой посетители - в блога с една заявкана минута няма смисъл). Ако имате поток от едновременни заявки, включете MinSpareServers, за да имате повече безплатни процеси. Като цяло е по-добре тази цифра приблизително да съответства на максималния брой заявки на Apache в секунда, които теоретично можете да срещнете (или вече сте срещнали). MaxConnectionsPerChild трябва да зададете, ако вашият apache изпуска памет (понякога поради неправилни модули или поради крив php код). Колкото по-бързо изтича, толкова по-нисък е броят (само имайте предвид, че нулата е за деактивиране на рестартирането на процеси, които са обработили много заявки). Сега за процесора. Тук на практика няма какво да настройвате - потреблението на процесора зависи от това колко оптимално е написан кодът ви на php. Можете да спечелите чрез оптимизиране на базата данни (когато php кодът чака отговор от базата данни, циклите на процесора все още отиват към него и самата заявка в mysql може да изяде добре процесора), можете да спечелите чрез кешове в кода (или външни кешове, като apc, които вече сме инсталирали), като използвате memcache вместо базата данни за „горещи“ данни. Но всичко това не са настройки на Apache, разбира се.
Ще се опитаме да деактивираме някои модули. Ако не сте сигурни, че не се нуждаете от модул, не го деактивирайте. Деактивирането на модулите спестява малко памет/процесор на процес, но след деактивирането на модулите може да срещнете „Вътрешна грешка на сървъра“, т.к. желаният модул може да се използва в конфигурацията или в htaccess (можете да разберете кой от модулите не е трябвало да бъде деактивиран в регистрационните файлове/var/log/apache2/other_vhosts_access.log и/var/log/apache2/error.log ). Най-безполезният модул е cgi (в deb8 той вече е деактивиран веднага, в deb7 трябва да го деактивирате сами преди това). Никой не използва cgi от дълго време. Ако използвате (хм?) - тогава не го праветеизключете го, разбира се.
#a2dismod cgi
Доста безполезният модул за автоматично индексиране. Ако не е необходимо да показвате списък с директории, изключете го. За всички заявки към директории (например example.com/dir/), Apache ще отговори с „404 Not found“. Разбира се, ние не деактивираме индексни файлове (които ще върнат index.php/index.html от директорията при такива заявки). Е, заявките към несъществуващи директории най-вероятно се обработват от php. (и не е необходимо минаващите хора да гледат какво имаме в съществуващите директории). Но за всеки случай, още веднъж - изключете го само ако сте сигурни, че определено не ви трябва.
#a2dismod -f autoindex
Доста безполезен модул за нашия случай е deflate. Този модул компресира отговорите към клиента, за да спести трафик (докато консумира процесор и малко памет). Защо трябва да компресираме трафика към единствения клиент на локалния хост, представен от nginx, не е ясно. Следователно може да се изключи. Вярно, често срещам факта, че някъде в htaccess файловете, изтеглени от интернет, се срещат параметрите на този модул и Apache стартира InternalServerError. Или смени htaccess, или включи модул, или нещо друго. Във всеки случай nginx ще компресира необходимия трафик към клиентите в gzip, а Apache компресията няма да достигне до клиентите.
#a2dismod -f deflate
Има смисъл да деактивирате филтърния модул (отново, докато не ви потрябва във вашия код/уебсайт):
#a2dismod -f филтър
Те също така включват модула за състояние извън кутията, който никой не използва наистина. Този модул ви позволява да показвате някои статистики чрез http. Можете да опитате да го персонализирате, но най-вероятно ще бъдете твърде мързеливи, за да го направите. Така:
#статус на a2dismod
В резултат на това минималният набор от модули, които никога не съм деактивирал в живота си, изглежда така:
#ls -1 /etc/apache2/mods-enabled/*.load /etc/apache2/mods-enabled/access_compat.load /etc/apache2/mods-enabled/alias.load /etc/apache2/mods-enabled/auth_basic.load /etc/apache2/mods-enable d/authn_core.load /etc/apache2/mods-enabled/authn_file.load /etc/apache2/mods-enabled/authz_core.load /etc/apache2/mods-enabled/authz_host.load /etc/apache2/mods-enabled/authz_user.load / etc/apache2/mods-enabled/dir.load /etc/apache2/mods-enabled/env.load /etc/apache2/mods-enabled/mime.load /etc/apache2/mods-enabled/mpm_itk.load /etc/apache2/mods-enabled/mpm_prefork.load /etc /apache2/mods-enabled/negotiation.load /etc /apache2/mods-enabled/php5.load /etc/apache2/mods-enabled/remoteip.load /etc/apache2/mods-enabled/rewrite.load /etc/apache2/mods-enabled/rpaf.load /etc/apa che2/mods-enabled/setenvif.load
На това с разбиването на апача закръгляме. За щастие ще се влюбя в повече кафе и ще пиша за конфигурации на виртуални хостове. Е, ще го прочетете след седмица.