Skip to main content

Ўстаноўка php-fpm і nginx на Debian 8



Ад стабільнай і хуткай працы сервера залежыць лёс сайта. Яго павольная праца і частыя падзення здольныя адпудзіць як наведвальнікаў, так і пошукавыя сістэмы. Апошнія яшчэ і панізяць рэйтынг тармозіць сайта ў выніках пошуку і ён апынецца не ў топ-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-пул для абслугоўвання запытаў

Першапачаткова ў 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 


Як вы ацэніце артыкул?
Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (8 адзнак, сярэдняе: 2,63 з 5)
Загрузка ...

” 4 Каментары "Усталяванне php-fpm і nginx на Debian 8"

  1. Добры дзень. Дырэктыву root у конфіге httpd кропкай з коскі зачыніць, напэўна, варта .. а сам конфіг змясціць у / etc / nginx / sites-enabled з назвай па імі адрасу сайта.

  2. А навошта ствараць карыстальнікаў для кожнага сайта асобна?
    Што значыць калі ўзламаюць аднаго карыстальніка, то іншыя сайты будуць у бяспекі?

    Ці трэба мне ствараць розных карыстальнікаў, калі я працую ў сістэме толькі адзін, уваход у сістэму па SSH праз сертыфікат.
    БД у Інтэрнэт таксама не глядзіць.

    Дзякуй.

Дадаць каментар

Ваш e-mail не будзе апублікаваны.