Тюнинг сервера Apache

Thank you for reading this post, don't forget to subscribe!

Apache — самый попу­ляр­ный Web сер­вер. Настрой­ка неко­то­рых пара­мет­ров (тюнинг) может дать суще­ствен­ный при­рост в ско­ро­сти его работы.

Модули

Отклю­чай­те моду­ли, кото­рые Вам не нуж­ны. Это сэко­но­мит мно­же­ство ресур­сов на обра­бот­ке запро­сов. Моду­ли Apache обыч­но постав­ля­ют­ся как пла­ги­ны (DSO), поэто­му их вклю­че­ние и отклю­че­ние дела­ет­ся про­сто через кон­фи­гу­ра­ци­он­ный файл.

Обыч­но Вам не нуж­но ниче­го, кро­ме таких модули:

MPM

MPM поз­во­ля­ет выбрать метод обра­бот­ки парал­лель­ных запро­сов. Опти­маль­ный вари­ант — Worker — поточ­ный MPM. В нем каж­дый запрос обслу­жи­ва­ет­ся в отдель­ном пото­ке одно­го из дочер­них про­цес­сов. Пото­ки — более лег­кие для ОС объ­ек­ты, чем про­цес­сы. Сле­до­ва­тель­но, в этом слу­чае про­из­во­ди­тель­ность повышается.

Для вклю­че­ния Worker MPM, нуж­но открыть файл

и убрать ком­мен­та­рий со строки

Пере­за­пу­стим Apache

AllowOverride и .htaccess

Дирек­ти­ва AllowOverride вклю­чай­те исполь­зо­ва­ние фай­ла .htaccess. В этом слу­чае при каж­дом запро­се Apache будет искать этот файл в запра­ши­ва­е­мых дирек­то­ри­ях. Пере­ме­щай­те всю кон­фи­гу­ра­цию в фай­лы вир­ту­аль­ных хостов (пап­ка /etc/apache2/sites-enabled/ для Debian) и отклю­чи­те исполь­зо­ва­ние htaccess:

MaxClients

Дирек­ти­ва MaxClients уста­нав­ли­ва­ет мак­си­маль­ное коли­че­ство парал­лель­ных запро­сов, кото­рые будет обра­ба­ты­вать сер­вер. Эту настрой­ку нуж­но адап­ти­ро­вать с тече­ни­ем вре­ме­ни, рабо­тай­те в пре­де­лах зна­че­ний в 128…4096:

Если сер­вер уже обслу­жи­ва­ет MaxClients запро­сов, новые запро­сы попа­дут в оче­редь, раз­мер кото­рой уста­нав­ли­ва­ет­ся с помо­щью дирек­ти­вы ListenBacklog.

MinSpareServers, MaxSpareServers, и StartServers

Эти дирек­ти­вы поз­во­ля­ют зара­нее иметь в памя­ти создан­ные про­цес­сы, что­бы не при­хо­ди­лось это­го делать во вре­мя полу­че­ния запро­са. Они уста­нав­ли­ва­ют­ся толь­ко для prefork mpm.

# При запус­ка Apache будет созда­вать 3 процесса

# Apache не будет уби­вать сво­бод­ные про­цес­сы, если их оста­ет­ся менее трех

# Мак­си­мум 5 сво­бод­ных про­цес­сов, осталь­ные будут уничтожаться

MaxRequestsPerChild

Дирек­ти­ва MaxRequestsPerChild уста­нав­ли­ва­ет сколь­ко запро­сов может обра­бо­тать один дочер­ний процесс/поток преж­де чем он будет завер­шен. По умол­ча­нию зна­че­ние этой дирек­ти­вы уста­нов­ле­но в 0, что озна­ча­ет что одна­жды создан­ный процесс/поток не будет завер­шен нико­гда. Этот пара­метр поз­во­ля­ет изба­вить­ся от про­блем с утеч­кой памя­ти, поэто­му луч­ше уста­но­вить его:

# После 4096 обра­бо­тан­ных запро­сов про­цесс будет перезапущен

KeepAlive

KeepAlive запро­сы поз­во­ля­ют уста­нав­ли­вать посто­ян­ные соеди­не­ния меж­ду кли­ен­том и сер­ве­ром. Это эко­но­мит ресур­сы на отсут­ствии повтор­ной уста­нов­ки соеди­не­ний. Обя­за­тель­но вклю­чай­те эту опцию.

# Вклю­ча­ем KeepAlive и уста­нав­ли­ва­ем вре­мя ожи­да­ния перед закры­ти­ем соеди­не­ния в 30 секунд

Быва­ют слу­чаи, когда поль­зо­ва­тель отправ­ля­ет толь­ко один запрос. Напри­мер, download-сер­вер. Тогда KeepAlive может быть бес­по­ле­зен и даже вре­ден, т.к. при вклю­чен­ном KeepAlive сер­вер закры­ва­ет соеди­не­ние не сра­зу, а ждет какое-то вре­мя (KeepAliveTimeout).

Сжатие

Все совре­мен­ные бра­у­зе­ры под­дер­жи­ва­ют сжа­тие. Вклю­че­ние gzip суще­ствен­но умень­шит раз­мер тра­фи­ка. Это нуж­но делать всегда.

Про­верь­те, что сжа­тие зара­бо­та­ло с помо­щью Online Gzip checker.

DNS

Выклю­чай­те лиш­ние запро­сы к DNS в Apache:

# Так Apache будет запи­сы­вать в лог IP адрес кли­ен­та вме­сто его хоста.

Все­гда исполь­зуй­те IP адрес в дирек­ти­вах Allow From и Deny From, а не домен­ные имена.

Самым боль­шим эффек­том на посе­ти­те­лей ока­жет вклю­че­ние сжа­тия gzip. Часто это эко­но­мит око­ло 70% трафика.