А сколько одновременных Апачей работало до перехода на nginx ?
Какой размер ядерного TCP буфера отправки ?
Насколько я понимаю, в данном случае появился лишь оверхед от
проксирования nginx'ом и больше ничего. Возможно ли отдавать статику
nginx'ом без проскирования на Апач ?
На том нагруженном сайте - в среднем работает по 400-600 апачей, >60
запросов в сек. Размер ядерного буфера... не менял, и к своему стыду
не знаю. После перехода на nginx появилось существенное снижение
отжираемой памяти и некоторое снижение нагрузки. Хотя я потом
задумался, не потому ли, что при том было пропорциональное снижение
трафика.
Держать апач на бакэнде заставляют следующие функции:
1) отключение неплательщиков (путём перенаправления на заданную
страничку), реализовано так
RewriteEngine On
RewriteMap block-domain-ru txt:/var/www/block.domain.ru
RewriteRule ^(/([^/]+)/.*)$ ${block-domain-ru:$2|$1}
файлик /var/www/block.domain.ru пополняется записями
firma74 http://domen.ru/pay.html
...
Это можно сделать примерно так:
http {
map $http_host $blocked {
firma74 http://domen.ru/pay.html;
...
}
server {
if ($blocked) {
rewrite ^ $blocked redirect;
}
...
}
2) layout'ы, И верхний И нижний, реализовано
LayoutDefaultHandlers Off
LayoutHandler text/html
LayoutHandler text/plain
LayoutHeader /var/www/domen.ru/header.html
LayoutFooter /var/www/domen.ru/footer.html
критично держать ОБА.
Но для картинок-то они не нужны ?
3) Хотя это вероятно УЖЕ можно средствами nginx реализовать -
ограничить превращение сайта во "внешнее хранилище + внешний трафик"
картинок для левых сайтов, реализовано простым отсевом тех, кто без
реферера их тянет
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]
это вобщем уже не критичный момент, однако были прецеденты, трафик
фигачил "не по делу", да и нагрузка :-))
4) Самое основное, почему, даже имея всё это, в апаче была введена
схема фронтенд-бакэнд, это необходимость упрощенного конфига для
поддержки сайтов типа *.domen.ru.
То есть для vasya.domen.ru нужно чтобы DocumentRoot был скажем
/var/www/domen.ru/vasya, а для ivan.domen.ru DocumentRoot был
/var/www/domen.ru/ivan
С апачом это удалось сделать только путем разбора на фронтенде
HTTP_HOST и передачи имени ПОДДОМЕНА в строке URI бакэнду, реализовано
на фронтенде так
RewriteCond %{HTTP_HOST} ^(.+)\.domen\.ru.*$ [NC]
RewriteRule (.*) http://backend.domen.ru.int/%1$1 [L,P]
RewriteRule .* http://domen.ru
Я правильно понимаю, что сейчас сделано так: - Apache -> backend ?
location / {
set $hostname main;
if ($http_host ~* "^(.+)\.domen\.ru.*$") {
set $hostname $1;
}
rewrite ^(.+)$ /$hostname$1 break;
proxy_pass http://backend.domen.ru.int;
}
Игорь Сысоев
http://sysoev.ru