С одним из сильно посещаемых сайтов при попытке перевести его с
apache на nginx происходит сильное падение трафика (обслуживания),
почти в 2 раза.
Схема такова: бакэндовый апач отдаёт статические в основном
странички, используется mod_layout; и прокси отдает всё это наружу.
На бакэнде применены фичи:
---------------------------------------------------------------------
# отключаем неплательщиков
RewriteEngine On
RewriteMap block-domain-ru txt:/var/www/block.domain.ru
RewriteRule ^(/([^/]+)/.*)$ ${block-domain-ru:$2|$1}
# ограничиваем любителей поделиться трафиком картинок
RewriteCond %{HTTP_REFERER}
!^http://[0-9a-z][0-9a-z-]*[0-9a-z]\.domain\.ru$ [NC]
RewriteCond %{HTTP_REFERER}
!^http://[0-9a-z][0-9a-z-]*[0-9a-z]\.domain\.ru/.*$ [NC]
RewriteRule ^.*\.(gif|jpeg|jpg)$ - [F,L,NC]
# батва
RewriteCond %{HTTP_REFERER} ^http://[^/]*[\%[:space:]][^/]*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://[^/]*[\%[:space:]][^/]*/.*$
RewriteRule ^.* - [F,L]
---------------------------------------------------------------------
На прокси всё соответственно проксируется
---------------------------------------------------------------------
Listen X.X.X.X:80
NameVirtualHost *:80
<VirtualHost *:80>
ServerName domen.ru
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.+)\.domen\.ru.*$ [NC]
RewriteRule (.*) http://hosting.domen.ru.int/%1$1 [L,P]
RewriteRule .* http://domen.ru
</VirtualHost>
---------------------------------------------------------------------
При попытке завернуть также, но используя nginx как прокси с конфигом
примерно таким
---------------------------------------------------------------------
user www www;
worker_processes 8;
events {
worker_connections 4096;
}
output_buffers 8192 128k;
userid on;
userid_name Apache;
server_names_hash_max_size 2048;
server_names_hash_bucket_size 256;
log_format accounting '$remote_addr $body_bytes_sent $http_host
[$time_local] '
'"$http_cookie" "$http_referer" "$request"';
server {
listen X.X.X.X:80 default backlog=2048;
server_name www.domen.ru *.domen.ru;
proxy_buffering on;
proxy_buffers 2048 128k;
set $host_part "";
location / {
if ($http_host ~* "^(.+)\.domen\.ru.*$") {
set $host_part $1;
}
rewrite ^(.*)$ /$host_part/$1 break;
proxy_pass http://127.0.1.6;
}
access_log /var/www/logs/access.log accounting buffer=32k;
}
---------------------------------------------------------------------
получаем потерю объёмов трафика раза в 1.5 - 2. И в логах примерно в
1.5 - 2 раза меньше "записей в минуту", чем при использовании апача.
Примерно с 5500 записей в минуту до 3500 падает.
Серфить вроде бы получается, есть мнение, что падает интенсивность
обслуживания (а может где-то и отказ получается, но в error.log очень
тихо, несколько раз в час о силы ругается). На страничках, где много
картинок, эти самые картинки отдаются с несколько большими задержками
(с апачем они прямо кучно так все появляются, а c nginx сначала штук
5, а потом остальные 15 с задержками).
Также замечается некоторое снижение интенсивности (по server-status)
на бакэнде, меньше процессов одновременно работает.
Всвязи с чем вопрос. Где ещё покрутить, чтобы добиться от nginx хотя
бы того же, что выкачивал апач? И почему такое снижение интенсивности?
Какая ОС ? Есть ли в логах что-нибудь про alert|crit ?
Игорь Сысоев
http://sysoev.ru