Ад стабільнай і хуткай працы сервера залежыць лёс сайта. Яго павольная праца і частыя падзення здольныя адпудзіць як наведвальнікаў, так і пошукавыя сістэмы. Апошнія яшчэ і панізяць рэйтынг тармозіць сайта ў выніках пошуку і ён апынецца не ў топ-10, а, скажам, у топ-100 па ўсім запытам.
Выкарыстанне звязкі nginx і php-fpm для абслугоўвання сайтаў дазваляе павялічыць хуткасць іх працы, а таксама стабільнасць сістэмы ў цэлым. Да таго ж, адмовіўшыся ад выкарыстання apache, мы некалькі спрашчаем сістэму і нават абараняем яе. Бо калі няма apache, то зламыснік не зможа выкарыстоўваць, напрыклад, файл .htaccess для сваіх мэтаў.
Нізку nginx + php-fpm наладжваць даволі лёгка і яна падтрымліваецца многімі папулярнымі CMS: WordPress, MODX, DLE, рознымі фреймворка. Усё гэта здольна працаваць і без грувасткага apache.
Пры ўсталёўцы вэб-сервера, не абысціся без стварэння карыстальнікаў. У ідэале, для кожнага сайта павінен быць створаны асобны юзер. Так мы зможам абараніць іншыя сайты, калі адзін з карыстальнікаў будзе узламаны. Прыклады ў гэтым артыкуле напісаны з улікам таго, што карыстальнікаў вы стварылі па інструкцыі .
Для пачатку ўсталюем базавыя модулі: php-fpm, mysql, curl, GD. Усё астатняе - па індывідуальнай неабходнасці.
# Aptitude install nginx php5-fpm php5-mysqlnd php5-curl php5-gd
Канфігурацыйныя файлы размяшчаюцца ў каталогу / etc / php5 / fpm /.
Змест артыкула:
- Настраиваем php-пул для обслуживания запросов 1 Наладжвальны php-пул для абслугоўвання запытаў
- Обработка php скриптов посредством nginx 2 Апрацоўка php скрыптоў пры дапамозе nginx
Наладжвальны php-пул для абслугоўвання запытаў
Першапачаткова ў php-fpm ёсць толькі адзін пул па імі www. Мы будзем выкарыстоўваць яго ў якасці асновы для іншых пулаў.
Адкрыем канфігурацыйны файл /etc/php5/fpm/pool.d/www.conf, разгледзім некаторыя зменныя і падбяром для іх значэння.
Першая зменная - гэтае імя пула. Яно заключаецца ў квадратныя дужкі і не можа супадаць з імем любога існуючага ў сістэме карыстальніка.
[www]
Далей паказваем імя карыстальніка і яго групу, у чыім хатнім каталогу размяшчаецца сайт.
user = username group = www-data
Паказваем, што пул павінен працаваць у якасці unix-сокета. Зменная $ pool будзе заменена на імя.
listen = /var/run/php-$pool.sock
Вызначаем выкарыстанне статычнага рэжыму, пры якім падчас запуску fpm ствараецца пэўная колькасць працэсаў пула. Яны абслугоўваюць ўсе паступаюць запыты.
pm = static
Чаму менавіта такі выбар? :) Гэта самы эканомны варыянт. Кожны працэс пула будзе займаць аб'ём аператыўнай памяці, выдзелены зменнай memory_limit плюс некалькі мегабайт на падлучаныя модулі, кэш і да т.п. Пры статычным варыянце ўсе запыты будуць апрацоўвацца толькі створанымі працэсамі, а новыя спараджацца (і займаць каштоўную памяць) не будуць. У выніку атрымаем фіксаванае спажыванне памяці.
Паказваем неабходную колькасць працэсаў, якія абслугоўваюць запыты. Падбіраецца ў залежнасці ад загружанасці.
pm.max_children = 3
Наступныя параметры рэкамендую дадаць у канец канфігурацыйнага файла пула.
Каталог для размяшчэння часовых файлаў:
php_admin_value [upload_tmp_dir] = "/ var / www / username / tmp"
Каталог для захоўвання файлаў сесій:
php_admin_value [session.save_path] = "/ var / www / username / sessions"
Па меркаваннях бяспекі, доступ да гэтых каталогах павінен быць толькі ў карыстальніка, з правамі якога запускаецца пул php-fpm. Таксама не варта выкарыстоўваць адзін каталог і для захоўвання файлаў сесій, і для часовых файлаў.
Абмежаванне памяці для выканання скрыптоў варта падбіраць, зыходзячы з патрабаванняў сайта. Для пачатку:
php_admin_value [memory_limit] = 50M
Пакажыце абавязковы параметр, які ліквідуе ўразлівасць :
php_admin_value [cgi.fix_pathinfo] = 0
Зменныя sendmail_path і open_basedir не пазначаюцца адмыслова. Яны будуць перададзеныя ў якасці параметраў fast-cgi ў канфігурацыйным файле nginx. Такім чынам, для кожнага канкрэтнага сайта можна вызначыць сваю наладу. :)
Пасля таго, як усе неабходныя параметры прапісаны, варта перазагрузіць канфігурацыю php-fpm камандай:
# Service php5-fpm reload
Апрацоўка php скрыптоў пры дапамозе nginx
Застаецца наладзіць nginx для працы з php-fpm. гатовы конфіг
server { server_name example.com; listen 80; access_log / var / log / nginx / example.com .access.log; error_log / var / log / nginx / example.com .error.log; charset utf-8; index index.php; root / var / www location / { try_files $ uri $ uri / /index.php$args; } location ~ \ .php $ { try_files $ uri = 404; fastcgi_pass unix: /run/php-www.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name; fastcgi_param PHP_VALUE "sendmail_path = / usr / sbin / sendmail -t -i -fmail@example.com"; fastcgi_param PHP_ADMIN_VALUE "open_basedir = / var / www / example.com /: / var / save_path /: / var / tmp_dir /"; } }
example.com замяняем на свой дамен.
Апісанне параметраў:
try_files $uri =404;
адлюструе памылку 404 у браўзэры карыстальніка, замест паведамлення no input file specified, у выпадку, калі дадзеная памылка мае месца.
fastcgi_pass
- шлях да сокета php-fpm.
fastcgi_pass unix: /run/php-www.sock;
Наступны пераменная ўсталёўвае шлях да sendmail і параметр, які паказвае адрас Электрапошта адміністратара сайта. Заменіце mail@example.com на нешта сваё.
fastcgi_param PHP_VALUE "sendmail_path = / usr / sbin / sendmail -t -i -fmail@example.com";
Пералічваем каталогі для open_basedir: каталог з сайтам, каталог для захавання часовых файлаў, каталог для файлаў сесій.
fastcgi_param PHP_ADMIN_VALUE "open_basedir = / var / www / example.com /: / var / save_path /: / var / tmp_dir /";
Калі патрабуецца перадаць некалькі параметраў, да рабіць гэта варта так:
fastcgi_param PHP_ADMIN_VALUE "sendmail_path = / usr / sbin / sendmail -t -i -fmail@example.com \ nopen_basedir = / var / www / example.com /: / var / save_path /: / var / tmp_dir /";
Як можна заўважыць, параметры падзяляюцца пры дапамозе пераносу радка: \ n.
Захоўваем ўсе праведзеныя змены і перазапускаем nginx.
# Service nginx reload
зрраствуйте не атрымліваецца не знаходзіць example.com
Добры дзень. Дырэктыву root у конфіге httpd кропкай з коскі зачыніць, напэўна, варта .. а сам конфіг змясціць у / etc / nginx / sites-enabled з назвай па імі адрасу сайта.
А навошта ствараць карыстальнікаў для кожнага сайта асобна?
Што значыць калі ўзламаюць аднаго карыстальніка, то іншыя сайты будуць у бяспекі?
Ці трэба мне ствараць розных карыстальнікаў, калі я працую ў сістэме толькі адзін, уваход у сістэму па SSH праз сертыфікат.
БД у Інтэрнэт таксама не глядзіць.
Дзякуй.
«Застаецца наладзіць nginx для працы з php-fpm. Гатовы конфіг »
а куды яго ўставіць-то?