Форум web-мастеров phpBB3

Модификации и расширения phpBB
Регистрация ·  Логин: Пароль: Запомнить   · Забыли пароль?




Ответить на тему
Пред. тема | След. тема 
Автор Сообщение
Admin
Аватара пользователя

Карма
29
Стаж: 6 лет 1 месяц
Сообщения: 312
Россия

Ответить с цитатой

Сегодня мы поговорим о поднятии высокопроизводительно веб-сервера на основе nginx и турбированного патчем fpm php-демона.
Сейчас ни для кого не секрет, что nginx является чуть ли не идеальным фронт-эндом. В качестве бек-энда сейчас часто используется старый добрый веб-сервер Apache, но при серьезных нагрузках на машину (высокая посещаемость сайта или выполнение требовательных к ресурсам задач) апач ведет себя как корова на льду: виснет, падает, жрет память, но не работает как надо. Да, апач хорош, ибо искаропки умеет php, но это только для баловства. Как веб-сервер для серьезных задач он не подходит категорически.
Сегодня речь пойдет о связке nginx+php-fpm как замена апачу.
Вы спросите: зачем заменять апач, если он и так хорош? За ответом я пошлю вас в гугл смотреть тесты производительности apache (1 и 2 версии. кстати 1.3 ведет себя живее чем 2) с упомянутой выше связкой.
Предупреждаю сразу: если посещаемость вашего сайта(ов) не велика, то советую пройти мимо этой статьи и продолжать использовать apache в качестве бек-энда для генерации динамики. Но можете прочитать статью, настроить, посмотреть и в принципе не увидеть разницы.
Делать все будем на CentOS 5 версии. На других дистрибутивах ничего сильно отличающегося нет, поэтому вполне подойдет и для остальных (за исключением того, что придется искать нужные пакеты на стороне и возможно в ручную патчить php). Хотел написать еще и для Gentoo, но пользователи данного дистрибутива и без того умные люди (ибо дурак не смог бы с ней работать), поэтому сами смогут решить задачу.
Поехали.
Проверяем наличие доступа к репозиторию EPEL. Если вы используете репозитории SAN, то значит все хорошо.
Устанавливаем nginx:

# yum install nginx

Подключаем репозиторий Varien следующим образом:

# cd /etc/yum.repos.d
# wget http://mirrors.nslp.ru/centos/nslp.repo

Далее выполняем попытку обновления системы:

# yum -y update

Если у вас уже стоят версии php младше 5.2.13 или php ручной компиляции, то ничего страшного. При обновлении установятся свежие (относительно) и главное вполне стабильные php-пакеты.
Если php не стоит, то устанавливаем:

# yum install php php-gd php-mbstring php-mcrypt

Устанавливаем гвоздь нашей программы:

# yum install php-fpm

Рассматривать установку и настройку mysql мы не будем. Сами разберетесь.
Теперь у нас имеется легковесный веб-сервер и пропатченая версия php-cgi. Но nginx вообще не умеет генерировать динамику (коими являются php-скрипты), поэтому начнем прикручить php-fpm к nginx.
Для начала открываем конфиг php-fpm и приводим его в божеский вид. Описывать каждую строчку не буду. Если интересно, то это вам задание на самостоятельную подготовку.

# nano /etc/php-fpm.conf

Приводим конфиг к следующему виду:

< configuration>
< section name="global_options">
< value name="pid_file">/var/run/php-fpm.pid< /value>
< value name="error_log">/var/log/php-fpm.log< /value>
< value name="log_level">notice< /value>
< value name="emergency_restart_threshold">10< /value>
< value name="emergency_restart_interval">1m< /value>
< value name="process_control_timeout">5s
< value name="daemonize">yes
< /section>
< workers>
< section name="pool">
< value name="name">default< /value>
# < value name="listen_address">/tmp/fcgi.sock< /value>
< value name="listen_address">127.0.0.1:9000< /value>
< value name="listen_options">
< value name="owner">
< value name="group">
< value name="mode">0666
< /value>
< value name="php_defines">
< /value>
< value name="user">nginx< /value>
< value name="group">nginx< /value>
< value name="pm">
< value name="style">static< /value>
< value name="max_children">10< /value>
< value name="apache_like">
< value name="StartServers">20< /value>
< value name="MinSpareServers">5< /value>
< value name="MaxSpareServers">35< /value>
< /value>
< /value>
< value name="request_terminate_timeout">0s< /value>
< value name="request_slowlog_timeout">0s< /value>
< value name="slowlog">logs/slow.log< /value>
< value name="rlimit_files">1024< /value>
< value name="rlimit_core">0< /value>
< value name="chroot">< /value>
< value name="chdir">< /value>
< value name="catch_workers_output">yes< /value>
< value name="max_requests">500< /value>
< value name="allowed_clients">127.0.0.1< /value>
< value name="environment">
< value name="HOSTNAME">$HOSTNAME< /value>
< value name="PATH">/usr/local/bin:/usr/bin:/bin< /value>
< value name="TMP">/tmp< /value>
< value name="TMPDIR">/tmp< /value>
< value name="TEMP">/tmp< /value>
< value name="OSTYPE">$OSTYPE< /value>
< value name="MACHTYPE">$MACHTYPE< /value>
< value name="MALLOC_CHECK_">2< /value>
< /value>
< /section>
< /workers>
< /configuration>

Обратите внимание на строчку

127.0.0.1:9000

Это адрес и порт, на котором будет висеть и слушать php-демон. Закомментированная строчка выше- использование unix-сокета для той же задачи. Вопрос о том, что эффективнее спорный: одни говорят что вешание демона на сокет эффективнее, другие считают наоборот.
Пробуем запустить php

# service php-fpm start

или

# /etc/init.d/php-fpm start

Если в консоли появилось нечто вроде

[root@server etc]# /etc/init.d/php-fpm start
Запускается php-fpm: [ OK ]

значит все хорошо и php в данный момент висит на 9000 порту ожидая запросов.
Теперь настраиваем nginx на перенаправление запросов к php-страницам на php-fpm.
Конфиг /etc/nginx/nginx.conf будет приблизительно следующим:

user nginx;
worker_processes 1;

error_log /var/log/nginx/error.log;
#error_log /var/log/nginx/error.log notice;
#error_log /var/log/nginx/error.log info;

pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main ‘$remote_addr — $remote_user [$time_local] $request ‘
‘»$status» $body_bytes_sent «$http_referer» ‘
‘»$http_user_agent» «$http_x_forwarded_for»‘;
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
# Load config files from the /etc/nginx/conf.d directory
include /etc/nginx/conf.d/*.conf;

server {
listen 80;
server_name mydomain.com;
location / {
root /var/www/mydomain;
index index.php index.html index.htm;

location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/mydomain$fastcgi_script_name;
include fastcgi_params;
}
}
}
}

В данном примере наш сайт лежит в дериктории /var/www/mydomain и имеет адрес mydomain.com. Указана корневая дериктория хоста (/var/www/mydomain). Далее, если идет запрос на php-страницу, то nginx переадресовывет его на php-cgi, который висит на 9000 порту. После обработки запроса php-демоном, nginx возвращает ответ клиенту.
Вот в принципе и все.
Добавляем nginx и php-fpm в автозагрузку

# chkconfig —level 345 add nginx on
# chkconfig —level 345 add php-fpm on

Вот собственно и все. Не используя apache мы получили неплохой и производительный веб-сервер.
Статься взята с vfose.ru
_______________________
Если нужен стиль для сайта, стучите: ICQ 560107181


Профиль  Отправить личное сообщение
Идеальный заработок для торрент-трекеров
Страница 1 из 1
Показать сообщения за:  Поле сортировки  
Ответить на тему

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

cron



Powered by phpBB, 9CaraTT.RU, 2012-2018.
Обратная связь
000webhost logo