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

Модификации и расширения phpBB




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

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

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

Сегодня мы поговорим о поднятии высокопроизводительно веб-сервера на основе 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
_______________________
[size=90:335q8cfb][color=#727272:335q8cfb]Если нужен стиль для сайта, стучите: ICQ 560107181[/color:335q8cfb][/size:335q8cfb]
Профиль  Отправить личное сообщение
Идеальный заработок для торрент-трекеров
Страница 1 из 1
Показать сообщения за:  Поле сортировки  
Ответить на тему

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

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

cron