• 28341
  • 120
  • 10
Нравится блог?
Подписывайтесь!

Танцы с бубнами: устанавливаем Nginx + fpm-php на CentOS

Вся история начинает с того, что VPS перестала держать сайт /*трекер ака кревед*/ не сам VPS, а всеми любимый Apache. Настроили связку Apache+Nginx, но все равно apache загибался, и было решено избавиться от Apache в пользу Nginx. И так по порядку. /*В некоторых местах можно сделать не много проще чем я описал, но я делал сам так… а как говориться опыт приходит с долгами*/

Устанавливаем CentOS на VPS и избавляемся оттого, что не нужно, и будем ставить заново:
# yum remove apache или yum remove httpd
# yum remove php
# yum remove phpmyadmin
# yum remove mysql-server
# yum remove php-mysql

Устанавливаем репозиторий centos.alt.ru, для i386 архитектуры:
# rpm -ihv http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
# rpm -ihv http://centos.alt.ru/repository/centos/5/i386/centalt-release-5-3.noarch.rpm
для x86_64 архитектуры:
# rpm -ihv http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-3.noarch.rpm
# rpm -ihv http://centos.alt.ru/repository/centos/5/x86_64/centalt-release-5-3.noarch.rpm

И так понеслась, устанавливаем php, fpm-php и модули которые нам нужны будут
# yum install php php-devel php-fpm php-mssql php-mcrypt php-mysql php-gd php-mbstring php-curl php- xml

Устанавливаем MySQL
# yum install mysql

Устанавливаем Ngnix
# yum install nginx

И еще установим Webmin (просто МНЕ проще делать не которые вещи через webmin чем через SHH)
# cd /tmp
# wget http://prdownloads.sourceforge.net/webadmin/webmin-1.500-1.noarch.rpm
# rpm -U webmin-1.500-1.noarch.rpm

Ответом будет:
"Thats it! you now can log into webmin from http://www.yourdomin.com:10000 or from your ip **.***.**.*:10000"

Теперь займемся конфигурацией nginx, редактируем фаил /ect/nginx/nginx.conf

У меня он выглядит приблизительно так

user nginx;
worker_processes 10;
worker_rlimit_nofile 100000;

error_log  /var/log/nginx/error.log;

pid    /var/run/nginx.pid;

events {
  worker_connections 1024;
  use epoll;
}

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"';

  sendfile    on;
  tcp_nopush   on;
  tcp_nodelay   on;
  server_tokens  off;
  gzip      on;
  gzip_static   on;
  gzip_comp_level 5;
  gzip_min_length 1024;
  keepalive_timeout 65;
  limit_zone  myzone $binary_remote_addr 10m;

  include /etc/nginx/conf.d/*.config;
}

Это стандартная конфигурация, кому интересно могут найти статьи как конфигурировать nginx и заточить все под себя. И так дальше, nginx сканирует папку /etc/nginx/conf.d/ где лежат конфиги для наших будущих сайтов, вот пример одного из моего сайта

server {
  limit_conn  myzone 10;
  listen    88.204.160.80:80;
  server_name www.mysite.kz mysite.kz;

    charset utf8;

  error_page 404     /error.html;

  location = /error.html {
    root  /home/mysite/html/err/;
  }

  error_page  500 502 503 504 /50x.html;
  location = /50x.html {
    root  /home/mysite/html/err/50x.html;
  }
    
  root /home/mysite/html;
    
  location ~ \.php$ {
    root /home/mysite/html;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /home/mysite/html$fastcgi_script_name;
    include  fastcgi_params;
  }
    
  location /capcha.gif {
    root /home/mysite/html;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /home/mysite/html/system/capcha2/antibot.php;
    include  fastcgi_params;
  }
    
  location ~* \.(jpg|jpeg|gif|png|bmp|ico|swf|flv|css|txt|xml|rss|js)$ {
    expires max;
  }

  location / {
    try_files $uri $uri/ @fallback;
    root /home/mysite/html;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /home/mysite/html/index.php;
    include  fastcgi_params;
    }
  
  location @fallback {
    root /home/mysite/html;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /home/mysite/html/index.php;
    include  fastcgi_params;
  }
}

Разберем все по порядку

Здесь указываем IP и домен для которого будет конфиг и который будет обрабатывать nginx.
limit_conn myzone 10;
listen 88.204.160.80:80;
server_name www.mysite.kz mysite.kz;
charset utf8;

Устанавливаем страницы для ошибок сервера

  error_page 404     /error.html;

  location = /error.html {
    root  /home/mysite/html/err/;
  }

  error_page  500 502 503 504 /50x.html;
  location = /50x.html {
    root  /home/mysite/html/err/50x.html;
  }

Если идет обращение на прямую к php скрипту то обрабатываем его при помощи fpm-php

location ~ \.php$ {
    root /home/mysite/html;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /home/mysite/html$fastcgi_script_name;
    include  fastcgi_params;
  }

Выводим капчу capcha.gif которая генериться скриптом /system/capcha2/antibot.php

location /capcha.gif {
    root /home/mysite/html;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /home/mysite/html/system/capcha2/antibot.php;
    include  fastcgi_params;
  }

Всю статику отдаем nginx

location ~* \.(jpg|jpeg|gif|png|bmp|ico|swf|flv|css|txt|xml|rss|js)$ {
    expires max;
  }

В своих проектах я обрабатываю url вот таким методом

$get_query = explode("/", preg_replace("/^\/(.*)\/?$/U", "\\1", $_SERVER['REQUEST_URI']));

В apache RewriteEngine используется такое правило

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php

Rewrite на Nginx будет выглядит так

  location / {
    try_files $uri $uri/ @fallback;
    root /home/mysite/html;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /home/mysite/html/index.php;
    include  fastcgi_params;
    }
  
  location @fallback {
    root /home/mysite/html;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /home/mysite/html/index.php;
    include  fastcgi_params;
  }

Теперь займемся конфигурацией fpm-php, он храниться в файле /etc/php-fpm.conf, по стандартным конфигам можно уже работать без проблем, если кому интересно смогут без проблем подправить под себя.

Вроде ничего не забыл. Запускаем php-fpm и nginx:
service php-fpm start
service nginx start

Теперь открываем в браузере mysite.kz и радуемся.

P.S. Может где-то опечатался, как нету машины для тестирования и писал по памяти, а это уже было давно и не правда ^^

16 февраля 2010, 12:48
4253

Загрузка...

Комментарии

smerch
0
0
поздравляю ты где-то в самом начале пути казторки
DIAsko
0
0
Все с чего-то начинают, а благими намерениями дорога в ад выстлана, стоит один раз заняться всем этим делом, а потом ух ДЕРЖИСЬ ^^
agz
0
0
blog.a2o.si Статья интересная. По тестам, если разгрузить Апач от статики и отдать ее nginx - php-fpm не нужен, ибо апач с nginx работают шустрей при больших загрузках. А если еще php-5.3.x использовать...
Еще кто-то писал что мудуль php для апача надо собирать как можно более статическим.
Вроде как это на производительность сильно влияет. Думаю так и есть под Linux, но не на FreeBSD :)

Оставьте свой комментарий

Спасибо за открытие блога в Yvision.kz! Чтобы убедиться в отсутствии спама, все комментарии новых пользователей проходят премодерацию. Соблюдение правил нашей блог-платформы ускорит ваш переход в категорию надежных пользователей, не нуждающихся в премодерации. Обязательно прочтите наши правила по указанной ссылке: Правила

Также можно нажать Ctrl+Enter

Популярные посты

Как мы «скидываемся» на красивую жизнь мажоров. Воровство пенсионных денег

Как мы «скидываемся» на красивую жизнь мажоров. Воровство пенсионных денег

Официальные спикеры КНБ РК рассказали о ходе расследования, раскрыв общественности схему, которую использовало руководство ЕНПФ для воровства 5 миллиардов тенге пенсионных накоплений.
openqazaqstan
13 янв. 2017 / 11:30
  • 14692
  • 16
10 лучших районов Алматы. Широкие улочки, частные дома, летом – красота!

10 лучших районов Алматы. Широкие улочки, частные дома, летом – красота!

Названия улиц: Садовый бульвар, Солнечный проезд. Красиво звучит не так ли? Прям, как в Москве... Уютные улочки и радующие глаз одноэтажные домики, тихо и свободно, нет динамики, движух и ажиотажа.
gelberdeuet
16 янв. 2017 / 14:45
  • 7489
  • 96
Я был удивлён, что в Азербайджане есть Казахский район

Я был удивлён, что в Азербайджане есть Казахский район

Мне как казаху по национальности очень хотелось туда попасть. Оказалось, что климат там намного суровей и люди, говорят, суровые и воинственные. Казах – город на западе Азербайджана...
alidimash
вчера / 21:50
  • 5579
  • 16
Наверное, я себя почувствовала человеком именно в Корее. Не в Казахстане

Наверное, я себя почувствовала человеком именно в Корее. Не в Казахстане

Если я останусь в Казахстане, то идти мне здесь некуда, пахать за копейки на госслужбе? Прожить всю жизнь в однокомнатной вместе с котом и мамой?
savira6
13 янв. 2017 / 9:44
  • 5709
  • 36
Айсулу Салгарина. Решил пойти в гости к той, что вызывает гордость за казахских девушек

Айсулу Салгарина. Решил пойти в гости к той, что вызывает гордость за казахских девушек

Прошло около 2 лет. За эти годы в моей жизни многое изменилось. И мне стало интересно, какие же изменения произошли в жизни тех, у кого я когда-то брал интервью...
DastanIskakov
14 янв. 2017 / 11:43
  • 4906
  • 5
Многочасовые очереди, смерти в ЦОНах: почему вопросы об этом ставят парламентариев в тупик?

Многочасовые очереди, смерти в ЦОНах: почему вопросы об этом ставят парламентариев в тупик?

Ожидали ли депутаты Мажилиса всего этого? Как планировали этот процесс регистрации, и обсуждали ли его, прежде чем одним нажатием кнопки принять нормы с такими абсурдными временными рамками?
openqazaqstan
17 янв. 2017 / 14:32
  • 4531
  • 20
Сейчас даже дяденьки и тетеньки в 20-27 лет живут с родителями. Безработица в Алматы

Сейчас даже дяденьки и тетеньки в 20-27 лет живут с родителями. Безработица в Алматы

Наверняка, все знают крылатую фразу Ленина "Кто не работает - тот не ест" В то время за безработицу осуждали, а кормили народ за счет предприятия - славные были времена, пусть я и застала их лишь...
DoZa
13 янв. 2017 / 9:54
  • 4415
  • 51
Сильное ДТП произошло в Алматы на Тимирязева-Байзакова

Сильное ДТП произошло в Алматы на Тимирязева-Байзакова

NoComment (c) Официальный слоган EuroNews. Катастрофа на алматинской утренней трассе началась с того, что водители «Ниссана» и микровена ожидали сигнала светофора на запад по Тимирязева...
ibestreporter
17 янв. 2017 / 22:52
  • 3356
  • 5
Вейпинг безопасен? Эндрю Холл из США тоже так считал, пока что-то не пошло не так

Вейпинг безопасен? Эндрю Холл из США тоже так считал, пока что-то не пошло не так

Эндрю Холл из США считал, что вейпинг безопасен и усиленно убеждал в этом близких. Но как-то раз что-то пошло не так. Это результат взрыва хипстерского устройства - выбило 7 зубов + ожоги и раны...
Maxambet
17 янв. 2017 / 16:28
  • 3193
  • 45