Yvision.kz
kk
Разное
Разное
399 773 постов42 подписчика
Всяко-разно
0
00:48, 16 февраля 2010

Танцы с бубнами: устанавливаем 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
510
4