• 29791
  • 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
4291

Загрузка...
Loading...

Комментарии

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

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

Юрист, пришедший в школу учителем по зову души, о главной проблеме системы образования

Юрист, пришедший в школу учителем по зову души, о главной проблеме системы образования

Алматинский учитель поставил диагноз системе, частью которой является образование. Будучи успешным юристом, имевший степень МВА, он вдруг развернул траекторию своей карьеры, став обычным учителем.
Zhumanova
22 сент. 2017 / 16:26
  • 10692
  • 33
«Это будут твои большие похороны». Гуф высказался о Скриптоните и Басте

«Это будут твои большие похороны». Гуф высказался о Скриптоните и Басте

Досталось и Скриптониту, который ранее опубликовал запись, о том, что больше не будет сниматься в клипе Гуфа и Тимати. "Я тебя ни о чем больше не попрошу, казах ты мой дорогой" - высказался рэпер.
tala03
21 сент. 2017 / 15:48
  • 4538
  • 12
«Честный взгляд» госслужащего: «Знала бы, что ты такой гнилой, я бы тебя не брала»

«Честный взгляд» госслужащего: «Знала бы, что ты такой гнилой, я бы тебя не брала»

Мы не такие блатные. Да, нас унижают руководители, возомнившие себя ханами, часто наши права не реализуются в должной мере. И я всегда задавался, почему на самом деле нет нормальных условий и льгот...
WriterKz
23 сент. 2017 / 0:41
Астана перестает быть городом-музеем, или Почему я хотел бы жить в столице

Астана перестает быть городом-музеем, или Почему я хотел бы жить в столице

Наш главный город страны стал избавляться от уже вполне неуместных моветонных клише, которые громоздились над ней, как черное облако над Мордором.
tentser
22 сент. 2017 / 21:04
  • 2186
  • 74
Время забыть безумные траты молодости: навыки, которыми ты должен овладеть к 30 годам

Время забыть безумные траты молодости: навыки, которыми ты должен овладеть к 30 годам

Смысл бюджета в том, чтобы знать, куда ты, блин, потратил бабки. В том, чтобы в конце месяца, ты сел, почитал свои записи и понял, какой ты придурок. И принял уже наконец здравое решение, что куда идет.
Lesch
24 сент. 2017 / 21:03
  • 1590
  • 59
Дагестанские «миротворцы» борются за справедливость в Мьянме на улицах Москвы

Дагестанские «миротворцы» борются за справедливость в Мьянме на улицах Москвы

Парней начали осуждать за поступок в социальных сетях. Популярные группы Кавказа назвали выходку парней дикой, и пояснили, что они позорят нацию и религию.
tala03
20 сент. 2017 / 16:42
  • 1714
  • 53
Насколько вероятно стать долларовым миллионером в Казахстане

Насколько вероятно стать долларовым миллионером в Казахстане

Вообще, насколько это достижимо? Не вдаваясь в сложные рассуждения и дательные расчеты и так понятно, что это сложная задача - все-таки около 350 миллионов тенге по текущему курсу.
convoluted
вчера / 14:36
  • 1551
  • 42
Как КНДР «уничтожила» американские самолеты и авианосец

Как КНДР «уничтожила» американские самолеты и авианосец

Серию коллажей, показывающую как ракеты КНДР нанесли поражения американским самолетам, продемонстрировали в северокорейских СМИ.
tala03
24 сент. 2017 / 17:58
  • 1486
  • 10
Заметка №16. «Burger shop». Съесть и не обляпаться практически невозможно

Заметка №16. «Burger shop». Съесть и не обляпаться практически невозможно

Если честно, для нас формат заведения был в диковинку - раньше нам доводилось есть бургеры в сетевых ресторанах фаст-фуда или же в заведениях, где кроме бургеров подают еще много разных блюд.
zhanuska_checkedboe
19 сент. 2017 / 15:12
  • 1475
  • 16