Перейти к содержимому
Обложка сообщества Разное

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

0
4
657

Еще по теме