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