XBT tracker — не панацея или как это сделать срочно средствами nginx

от автора

Зачастую многие, кто сидит на TBDev не знают, как спастись от нагрузки на сайт, когда пришла пора посетителей посетить ваш чудесный сайт. И то не всегда. Нагрузка может появиться в любой неудобный момент, когда вы в отпуске, на разъезде или вообще по делам.
Как вариант, переход на XBT Tracker (но многие ли будут заниматься им, в судьбоносный час, когда рушится надежда всех посетителей?) решит проблемы, согласен, но это ответственное дело требует не 10 минут вашего внимания. Смотря, под какие задачи заточен ваш ресурс…

Проблема решается просто (если у вас стоит только nginx и php5-fpm):

1) Начнем с конфига определенного домена в nginx:
где some — это ваш ip или домен, смотря по ситуации.
его можно создать по пути здесь : /etc/nginx/sites-available/

назовите some.ru(или some.com,some.net — смотря, что у вас за домен) и вносите конфиг такой, как на примере:

server {         listen someip:80;#где, someip - ваш ip адрес         server_name some.ru;# ваш домен полностью         #root /home/some/data/www/some.ru; 	    root /var/www/some/data/www/some.ru;         index index.php index.html index.htm;         #client_max_body_size 50M;         client_max_body_size 10M;  location ~\announce.php$ {         try_files $uri =404;         #fastcgi_split_path_info ^(.+\.php)(/.+)$;         fastcgi_pass unix:/var/run/announce.sock; # Сокет php-fpm         fastcgi_index index.php;         include fastcgi_params;                 fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;                 fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;                                     } location ~\scrape.php$ {         try_files $uri =404;         #fastcgi_split_path_info ^(.+\.php)(/.+)$;         fastcgi_pass unix:/var/run/scrape.sock; # Сокет php-fpm         fastcgi_index index.php;         include fastcgi_params;                 fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;                 fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;                                     }  location ~\shoutbox.php$ {         try_files $uri =404;         #fastcgi_split_path_info ^(.+\.php)(/.+)$;         fastcgi_pass unix:/var/run/shoutbox.sock; # Сокет php-fpm         fastcgi_index index.php;         include fastcgi_params;                 fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;                 fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;                                     }           location / {                      limit_req zone=one burst=3;                        }          access_log off;         error_page 502 = http://some.ru/502.html;         error_log  /var/log/error_some.log crit;          location ~ \.php$ {         try_files $uri =404;         fastcgi_split_path_info ^(.+\.php)(/.+)$;         fastcgi_pass unix:/var/run/some.ru.sock; # Сокет php-fpm         fastcgi_index index.php;         include fastcgi_params;                 fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;                 fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;         }          location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ { expires max; }        location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {        			root /home/some/data/www/some.ru;  			error_log /var/log/nginx/some.ru_errors.log debug; 			access_log off; access_log /var/log/some.ru.access.log; 			expires 30d; 			add_header   Cache-Control  public;        } }  

не забудьте сделать команду в командной строке, чтобы создать символическую ссылку в папке /etc/nginx/sites-enabled (иначе, ваш сайт просто не заработает):

ln -s /etc/nginx/sites-{available,enabled}/some.ru 

Как видите, самыми ресурсоемкими являются файлы: announce.php(анонсер, который бесконечно жрет ваше процессорное время в зависимости от жаждущих что-то скачать), scrape.php и shoutbox.php (чат, где горлопанят все, кому не лень — еще и при такой нагрузке. Боже, как нелегко..)

2) Создаем в папке etc/php5/fpm/pool следующее:

для announce.php создаем файл announce.conf со следующим содержимым:

[announce] listen = /var/run/announce.sock user = some # реальный юзер (смотрите у себя, кто владелец) group = some # реальную группу (аналогично) listen.mode = 0666 chdir = /home/some/data/www/some.ru/ php_admin_value[info_tmp_dir] = /usr/share/tmp php_admin_value[soap.wsdl_cache_dir] = /usr/share/tmp #php_admin_value[date.timezone] = Asia/Moscow # тут значения можно поменять, в зависимости от нагрузки на сайт #process.max = 128 #emergency_restart_interval = 5m rlimit_core = unlimited #process.priority = -19 pm = dynamic pm.max_children = 50 pm.start_servers = 16 pm.min_spare_servers = 5 pm.max_spare_servers = 35 pm.max_requests = 200 request_terminate_timeout = 30s #request_slowlog_timeout = 5s 

3) для scrape.php создаем файл scrape.conf со следующим содержимым:

[scrape] listen = /var/run/scrape.sock user = some # реальный юзер (смотрите у себя, кто владелец) group = some # реальную группу (аналогично) listen.mode = 0666 chdir = /home/some/data/www/some.ru/ php_admin_value[info_tmp_dir] = /usr/share/tmp php_admin_value[soap.wsdl_cache_dir] = /usr/share/tmp #php_admin_value[date.timezone] = Asia/Moscow # тут значения можно поменять, в зависимости от нагрузки на сайт #process.max = 128 #emergency_restart_interval = 5m rlimit_core = unlimited #process.priority = -19 pm = dynamic pm.max_children = 50 pm.start_servers = 16 pm.min_spare_servers = 5 pm.max_spare_servers = 35 pm.max_requests = 100 request_terminate_timeout = 10s #request_slowlog_timeout = 5s 

3) и для shoutbox.php (чертового чата) # если у вас его нет, можете смело забыть про него
создаем файл shoutbox.conf со следующим содержимым:

[shoutbox] listen = /var/run/shoutbox.sock user = some # реальный юзер (смотрите у себя, кто владелец) group = some # реальную группу (аналогично) listen.mode = 0666 chdir = /home/some/data/www/some.ru/ php_admin_value[info_tmp_dir] = /usr/share/tmp php_admin_value[soap.wsdl_cache_dir] = /usr/share/tmp #php_admin_value[date.timezone] = Asia/Moscow # тут значения можно поменять, в зависимости от нагрузки на сайт #process.max = 128 #emergency_restart_interval = 5m rlimit_core = unlimited #process.priority = -19 pm = dynamic pm.max_children = 50 pm.start_servers = 16 pm.min_spare_servers = 5 pm.max_spare_servers = 35 pm.max_requests = 100 request_terminate_timeout = 30s #request_slowlog_timeout = 5s 

далее, применяем в командной строке магические:

service nginx restart 

и

service php5-fpm restart 

PROFIT!

Надеюсь, я помог кому-то… на первое время.

За сим откланиваюсь.

ссылка на оригинал статьи http://habrahabr.ru/post/263829/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *