---
title: "Танцы с бубнами: устанавливаем Nginx + fpm-php на CentOS"
description: "Вся история начинает с того, что VPS перестала держать сайт /*трекер ака кревед*/ не сам VPS, а всем..."
author: "DIAsko"
published: "2010-02-16T00:48:49+00:00"
modified: "2010-02-16T00:48:49+00:00"
locale: "ru"
canonical_url: "https://yvision.kz/post/tancy-s-bubnami-ustanavlivaem-nginx-fpm-php-na-centos-30541"
markdown_url: "https://yvision.kz/post/tancy-s-bubnami-ustanavlivaem-nginx-fpm-php-na-centos-30541/markdown"
site_name: "Yvision.kz"
---

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

> Вся история начинает с того, что VPS перестала держать сайт /*трекер ака кревед*/ не сам VPS, а всем...

Вся история начинает с того, что 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. Может где-то опечатался, как нету машины для тестирования и писал по памяти, а это уже было давно и не правда ^^

---

Source: [https://yvision.kz/post/tancy-s-bubnami-ustanavlivaem-nginx-fpm-php-na-centos-30541](https://yvision.kz/post/tancy-s-bubnami-ustanavlivaem-nginx-fpm-php-na-centos-30541)