Кому нужна медленная социальная сеть? Оптимизируем свой сайт – FreeBSD и Apache

Вот и пришло время рассказать о том, как можно сделать комфортную социальную сеть за “5 минут” (как же хвалит себя разработчик WordPress).

Речь пойдет о Unix, WordPress MU и BuddyPress – на их основе можно достаточно быстро создать социальную сеть. Про установку этих компонентов можно почитать на просторах сети:

Советов по оптимизации WordPress MU в сети великое множество и пытаться изобрести велосипед совершенно не хочется, а вот как настроить Unix (вернее MySQL, PHP и Apache) – тут можно дать несколько практических советов, что, собственно, и хотелось бы сделать.

Весь мануал по оптимизации разбит на 3 части: Apache, PHP, MySQL. Но начнем с FreeBSD… Почему? Именно на данной системе проводилась оптимизация.

divider

Начните оптимизацию с операционной системы Вашего сервера! Что тут можно дать в качестве советов?

Исходные данные: FreeBSD 7, 1Gb RAM, SATA массив…

1) Закройте от внешнего мира все порты кроме нужных.

2) Используйте SSH для работы с сервером (шифрование канала, отсутствие возможности под root-ом войти в систему.. как минимум сразу).

3) Не ставьте лишнее ПО (в том числе ftp-сервера).

4) Используйте следующие настройки:

sysctl.conf  (справедливо для FreeBSD)

* net.inet.tcp_log_in_vain=1
* net.inet.udp.log_in_vain=1
* net.inet.tcp.blackhole=2
* net.inet.tcp.blackhole=1
* net.link.ether.inet.max_age=900
* net.inet.icmp.markperl=0
* net.inet.ip.sourceroute=0
* net.inet.icmp.bmcastecho=0
* net.inet.tcp.syncookies=1
* net.inet.op.ttl=52

5) Поставьте из портов защиту от подбора пользователя и пароля (ой какая нагрузка идет на сервер…), к примеру sshguard.

На самом деле, найти советы по настойке сервера – легко, их много и есть статьи, по которым можно определить полезность той или иной настройке – гуглите! Но помните – на продуктиве никаких эксперементов! (есть горький опыт, о котором скоро будет написано…)

Вот ссылки, которые могут вам понадобится при настройке вашей системы на FreeBSD:

divider

Самое вкусное – это настройка Apache, PHP и MySQL – ведь наша цель сделать быструю социальную сеть!

Apache

Cамое важное – это наш веб-сервер и без него все остальное не имеет смысла, а еще это самое атакуемое место на нашем сервере со стороны хакеров и прочих “кому делать нечего”. Первое, что надо сделать, – так это отключить все лишние модули (mod)! Какие – это, опять же, гуглить.

Затем настроить  – и тут уже есть опыт! Задайте параметры для своего веб-сервера в файле httpd.conf:

  • ServerLimit и MaxClients, моя рекомендация 32, но тут уже надо смотреть на возможности Вашего сервера и готовность отказать тем клиентам, для которых уже нет лишних ресурсов. Если сервер нормально работает с данным значением, то поднимайте его.
  • KeepAlive – поставить On, так как каждое подключение к серверу – это создание процесса и на это требуется время.. То просто необходимо не закрывать сразу это соединение, а вдруг пользователь не ограничится стартовой страницей Вашей социальной сети.
  • KeepAliveTimeout – поставить 4, цифра опытного пути, погуглив – поймите свое значение этого параметра.
  • MaxKeepAliveRequests – поставить 16, параметр на тему – максимальное количество “висящих” соединений.
  • MaxRequestsPerChild – поставить 96, это количество последовательных запросов на одно открытое соединение, делать его безлимитным – это получить бесконечно большой процесс.. а это может сказаться на расходе памяти Вашего сервера и в уходе в Swap (своп-память вообще не должна использоваться – это только на самый критический случай).
  • MinSpareServers – поставить 4, это минимальное количество открытых для соединений экземпляров Вашего веб-сервера.
  • MaxSpareServers – поставить 8, это максимальное количество открытых для соединений экземпляров Вашего веб-сервера,  но по наблюдениям – параметр, скорее всего, перебивается MaxKeepAliveRequest …
  • StartServers – поставить 4, это стартовое количество открытых для соединений экземпляров Вашего веб-сервера. Если обращений к серверу очень много – увеличивайте это значение, создание нового экземпляра – это время (чем больше – тем хуже, чем меньше – тем неудобнее пользователям)…
  • TraceEnable – поставьте Off, параметр относится к безопасности Вашего веб-сервера.
  • HostNameLookups – поставьте Off, тогда в процессе логирования не будет идти процесс попытки определить имя по IP.. Это улучшит производительность.

В конфигурации Вашего сайта – обязательно настройте логирование! Логи позволяют анализировать работу Вашего веб-сервера.

  • ErrorLog “…/../server-error.log”
  • CustomLog “…/../server-access.log”

Незабыв установить правила в newsyslogs (ротация логов).

Кстати, после внесения изменений – перезапустите Ваш веб-сервер:

httpd -k stop, httpd -k start

divider

В следующей части вы прочитаете о некоторых советах по настройке PHP.

Данный пост является гостевым, весь материал принадлежит Александру
(вот его социальная сеть SportActions.ru и личный сайт Milordk.ru).

комментариев 20

  1. Александр:

    Хнык, не забывайте, что после того как все настроили.. нужно сделать резервную копию!!! А то обидно будет если что.. :)

    Вообще все эти рекомендации следует рассматривать как исходные настройки.. после анализа работы сервера (не менее недели, ведь нужно посмотреть как живет сервер и по дням недели) – докручивать под свою конкретную ситуацию (модули, плагины и тп – у каждого свои нюансы)

  2. @Александр:
    Только вот я думаю, что надо еще и перед настройкой сделать резервную копию. На всякий…

  3. Игорь:

    Здравствуйте. Спасибо,вовремя. Стало интересно, почему на впс сайт ложился, достал железо 256 mb озу Pentium3 1100, установил Debian, настроил все на динамический ip, ADSL модем, ПО – панель webmin+virtualmin, апач, mysql, proftpd, установил wpmu, buddypress, устанавливаю плагины, на данный момент 85 mb озу, интересно, на сколько возможностей такой конфигурации хватит))

  4. Александр:

    Думается мне… что не на особо долго :) Моя система в старт дает 25Mb и в режиме готовности 96Mb… :)

    Совет: убить proftpd (у sshd есть sftp), virtualmin (а он то зачем?)

    Вопрос: динамический IP?…

  5. Александр:

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

    почему так? да я намучился с FreeBSD и те кто говорит о “крутости” Unix – могут идти в лес! так как что можно придумать проще чем – подключение USB HDD в Windows и создание копии диска за несколько минут? В Unix – вам еще надо подмонтировать и то если система в панику не уйдет и потом не получить облом – так как вашему диску уже год а то и два – а самая новая версия unix-а его не видит… или вернее не знает как с ним работать…

  6. Игорь:

    virtualmin (а он то зачем?) – это у меня просто задумка, настроить систему для такой конфигурации, и сделать шаблон, желающим для старта и изучения, и выложить для всеобщего пользования, любой установит дома виртуальную машину и попробует)) ну а я в целях своего познания, буду пытать реальную машину)) можно конечно обойтись без virtualmin, но все-таки сложновато пересесть с винды на Linux Unix, со старта))

  7. Игорь:

    Совет: убить proftpd (у sshd есть sftp) попробую, спасибо

  8. Александр:

    Игорь,
    ну так Вы же поставили Unix с нуля… 30% понимания уже есть :)

  9. Игорь:

    ну так Вы же поставили Unix с нуля… 30% понимания уже есть, угу, на данный момент уже разобрался, почти… ))

  10. Александр:

    Игорь, ну теперь нарабатывать опыт :) главное: не верить всему что пишут в сети!

    поставьте denwer для отладки и вперед – проверять заявления от разных там гуру… (сейчас модно на блогах писать на всякие умные темы) – среди множества найдете действительно полезные подсказки, советы и примеры

  11. Петр:

    Вячеслав, привет!
    Есть вот такое решение – http://www.1c-bitrix.ru/products/vmbitrix/
    Посмотри пожалуйста, оцени и скажи, можно ли брать на вооружение?
    Спасибо и удачи!

  12. @Петр:
    Ну если вам будет проще ознакомиться, то можно. Но вообще не рекомендую. Пакет заточен под bitrix и вырезано куча всего. Решать вам, но я считаю, что лучшее испытание – в боевых условиях.

  13. Петр:

    Спасибо! Как говорят “тяжело в учении – легко в бою” =)

  14. Vladimir:

    MinSpareServers/MaxSpareServers — минимальное и максимальное количество свободных (не обрабатывающих запросы) процессов Apache. Если бездействующих процессов больше, чем MaxSpareServers, Apache убьёт лишние процессы. Если бездействующих процессов меньше, чем MinSpareServers, Apache будет создавать новые процессы со скоростью процесс в секунду.

    MaxRequestsPerChild — максимальное количество запросов, которое может обработать один процесс (после чего он будет перезапущен). При этом не обязательно, что процесс будет обрабатывать запросы только одного клиента. Имеет смысл поставить значение побольше — 1,000…10,000.

    Вообще с точки зрения быстродействия prefork — это зло. Лучше поставить nginx и PHP в режиме FastCGI :-)

  15. Vladimir,

    по поводу MaxRequestsPerChild – сделал 16, на ресурсах сервера это сказалось позитивно.. странно, но факт :)

    Nginx – у меня на проекте он используется, приростов значительных не заметил.. зы: без Apache – пока никак:)

    Вообще статью лучше рассматривать с позиции – “на что обратить внимание” и с мыслью “с этих настроек начать”

  1. 10.12.2009

    […] часть, посвященную настройке FreeBSD и Apache, тоже стоит прочитать (кто этого еще не […]

  2. 12.12.2009

    […] Кому нужна медленная социальная сеть? Оптимизируем св

  3. 22.02.2010

    […] статьях уже рассказывалось про оптимизацию MySQL, PHP, Apache и чуть чуть о FreeBSD. сегодня у нас появился Nginx и […]

  4. 18.05.2011

    […] здесь про php, а здесь про мускул. Также будет полезной первая часть вот этого поста по настройке FreeBSD – до […]

  5. 01.06.2012

    […] кеширования сайта, настройку собственного сервера (часть 1, часть 2, часть 3), использование YSlow для ускорения […]

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *