Рабочая конфигурация сервера…звучит сложно не правда ли? Ведь большинство web-серверов работают на linux, будь то debian, centos,fedora,gentoo,redhat или opensuse. Но на самом деле за страшными и непонятными на первый взгляд системами, скрывается залог стабильной работы Ваших проектов. Так как мне привычнее всего работать с debian я буду говорить именно об этой OS хотя вскольз затрону и некоторые другие.
Данная операционная система чрезвычайно стабильна. За кучей непонятных, казалось бы, команд, можно найти стройную и логичную, малотребовательную к ресурсам систему, при грамотной настройке которой, можно даже на слабом сервере размещать средне-нагруженные проекты. Но это все лишь общие слова. Вы мне конечно же не поверите на слово, ведь вы программисты, привыкшие все проверять. Ну что же…давайте проверим.
Я уже рассказывал, что для работы сайта требуется Web-сервер, и для ОС windows незаменим пакет denwer. Но это лишь первые шаги, denwer отличен лишь для локальной машины для дебага. Большинство же «боевых» серверов работает на LAMP (Linux+Apache+MySQL+PHP). А что делать когда нагрузка велика и сервер не справляется? Неужели покупать новый? Нет! Оптимизировать, оптимизировать и еще раз оптимизировать. Если код ваш «вылизан» и вы уверены что он оптимален..что ж значит настала очередь серверного ПО. И прежде всего это web-сервер.
Чем плох apache? Да собственно практически ничем. Он очень функциональный, гибкий…удобный, повсеместно распространенный…но тяжелый..Да, да именно тяжелый..чем больше модулей вы подключаете к нему тем больше ресурсов он «отжирает». Но зачем все это в том случае когда отдается статический контент, например jpg,css,html,zip и т.д.? Куча оперативной памяти занимается впустую. Что ж…с этим надо что-то делать. И поможет нам в этом nginx. Это легкий web сервер не умеющий работать с динамическим контентом, но отлично отдающий статику. Количество процессов данного web-сервера жестко задается в конфиге и новые процессы не создаются автоматически, Из чего фактически вытекает что потребление памяти nginx очень мало.
Я надеюсь что из моего описания вы оценили всю прелесть данного web-сервера. Если же все еще не прониклись советую посетить сайт
В зависимости от того какая ОС у вас стоит в ней должен присутствовать какой-либо мэнеджер пакетов. В debian-подобных системах это aptitude, в centos, fedora и т.д. – это yum. Т.к. с другими мэнеджерами я практически не сталкивался-опишу установку с помощью этих двух. Начнем с aptitude.
Прежде всего надо обновить список доступных приложений из репозитория.
|
sudo перед aptitude говорит о том что команду мы запускаем с правами суперпользователя. Если вы уже работаете из под рута эту команду можно опустить.
После обновления пакетов ищем nginx.
|
Ответом должно быть что-то типа этого:
|
Ну что ж…теперь установим nginx.
|
Вот и все. Просто не правда ли?
Теперь давайте покажу как это делается через yum. Тут все аналогично и просто.
|
Первой командой очищаем кэш. Второй получаем его по новой. Ищем nginx, смотрим его название и ставим.
Часто в репозиториях не самая последняя версия. Поэтому многие самостоятельно из исходников собирают ПО. nginx собрать довольно просто. Главное не забудьте доустановить gcc для компиляции)
|
После успешной конфигурации компилируем и устанавливаем
|
Ну, надеюсь с установкой разобрались. Теперь настройка.
Прежде всего надо понимать что два web-сервера не могут работать на одном порту. Т.е изначально все запросы должен обрабатывать nginx. В зависимости от запрашиваемого типа контента он должен отдавать статику сам, а запросы динамики передавать apache.
Для этого настроим apache таким образом чтобы он «слушал» лишь порт 8080.
Перед тем как редактировать все конфиги-забэкапьте их, вдруг что-то сделаете не так.
Прежде всего поправим файл /etc/apache2/ports.conf (здесь и далее описываю настройку уже на примере debian, т.к на CentOS и иже с ними это делается идентично, единственно отличие-имена и пути до файлов (в CentOS /etc/httpd/conf/httpd.conf)) таким образом чтобы он выглядел примерно так:
|
Т.е. Listen 8080 говорит о том, что apache слушает этот порт. Далее в каждом virtualhost (файлы в папке /etc/apache2/sites-enabled/) поправим порты (т.е. как я уже говорил меняем значение 80 на 8080).
На этом приготовления apache закончены. Настала очередь nginx.
Заходим в /etc/nginx/sites-availabel и создаем файлы конфигурации хостов.
|
Редактируем его.
|
После чего создаем ссылку на файл в sites-enabled:
|
рестартуем nginx:
|
Наслаждаемся.
Надеюсь данная статья Вам был полезна, уважаемый читатель. Если у Вас появились какие-то вопросы-пишите в комментах. Буду рад ответить.
P.S. Забыл предупредить, чтобы $_SERVER['REMOTE_ADDR'] была правильной поставьте себе mod_rpaf для apache.
|
P.P.S. Уже после написания статьи, но до публикации, подумал о том что я не оставил надежды тем кому уже связка nginx+apache не помогает. Так вот, если вы готовы к трудностям для вас fpm-php+nginx. Как-нибудь опишу процесс установки и настройки и этой связки.