Hi, all!
Есть проблемы с использованием weight в upstream в целях распределения
нагрузки.
Если вес выставлен одинаковый, то нагрузка распределяется равномерно.
Пример:
upstream test_backend {
server localhost:59040 weight=10000;
server other_server:59040 weight=10000;
}
Если же выставить разный вес, то нагрузка распределяется неравномерно по
времени, каждые десять минут меняется сервер и все. Сужу об этом по графикам
загрузки серверов. 10 минут все запросы идут на один сервер, затем 10 мин. на
другой.
Пример:
upstream test_backend {
server localhost:59040 weight=10000;
server other_server:59040 weight=5000;
}
location / {
expires epoch;
fastcgi_pass test_backend;
fastcgi_upstream_max_fails 0;
fastcgi_next_upstream error timeout invalid_header http_500;
include fastcgi_param.conf;
}
Но обнаружил, что если цель треть нагрузки отправлять на другой сервер, то
такое помогает:
upstream test_backend {
server localhost:59040 weight=10000;
server localhost:59040 weight=10000;
server other_server:59040 weight=10000;
}
# nginx -v
nginx version: nginx/0.3.60
# uname -a
Linux tapo.net 2.6.8-2-386 #1 Tue Aug 16 12:46:35 UTC 2005 i686 GNU/Linux
Если имеется такая конструкция в конфиге
location / {
root
/web1/users/mds_rudn/www/download.mds.rudn.info/htdocs/;
proxy_pass http://127.0.0.1:80;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-NGX-Request NGX;
proxy_set_header Host $http_host;
index index.html index.htm;
}
И бекенд выдает X-Accel-Redirect - редирект идет снова через proxy_pass
хост? Как этого избежать, т.е. что бы nginx выдавал файл сам по uri
взятому из X-Accel-Redirect с корнем сайта root.
Здравствуйте nginx-ru,
Пару часов назад нас досили и через пару минут после начала атаки
nginx показал 500 ошибку. Причиной тому стало очень много открытых
файлов. OC FreeBSD.
kern.maxfiles: 16424
kern.maxfilesperproc: 14781
kern.openfiles: 610
После начала атаки бэкенд (Апач) не мог отвечать, загруженный
запросами и пытаясь при этом сделать внутренний редирект для nginx.
Логи кое-какие сохранились. Могу выслать.
Вопрос: какие файлы мог создавать nginx в большом количестве и как
этого в будущем избежать?
С уважением,
Михаил Монашёв, SoftSearch.ru
Member of Independent Software Developers Forum (ISDEF)
mailto:postmaster@softsearch.ru
ICQ# 166233339
http://softsearch.ru/
Без бэкапа по жизни.
Добрый день,
после того как кол-во виртуальных хостов перевалило за пол тысячи начались
проблемы.
Nginx не реагирует никак на сигнал HUP. Приходится перезапускать через USR2.
# uname -a
Linux nl3 2.6.17-1.2157_FC5smp #1 SMP Tue Jul 11 23:24:16 EDT 2006 i686 i686
i386 GNU/Linux
# grep server_name /nginx/conf/virt.conf|wc -l
547
Linux, Fedora Core 5
Тестировал на версиях nginx: 0.3.38, 0.4.2
В error.log пусто. Кто-то сталкивался?
Поиском пользовался.
--
Kirill Morozov
Возможно ли настроить nginx так, чтобы в случае если нет заголовка
Last-Modified в ответе от бакенда, nginx сам подставлял текущее время в
этот заголовок.
--
Zherdev Anatoly.
Изменения в nginx 0.4.12 31.10.2006
*) Добавление: модуль ngx_http_perl_module поддерживает метод
$r->variable.
*) Исправление: при включении в ответ большого статического файла с
помощью SSI ответ мог передаваться не полностью.
*) Исправление: nginx не убирал "#fragment" в URI.
Игорь Сысоев
http://sysoev.ru
Добрый день!
У нас возникла такая задача - отключение сайта (например, при
обновлении и т.п.). Для этого хочется в корень сайта класть файл,
который (если он присутствует) будет отдаваться пользователю с кодом
(sic!) 503.
Как это сделать в nginx? есть условие проверки существования файла -
if (-f имя), rewrite'ом можно переписать запрос на требуемое имя
файла, но как выдать код 503?
Код нужен, чтобы поисковики в момент отключения файла не
проиндексировали страницу-заглушку.
Привет.
Нужен совет бывалых по паре вопросов.
1.
Обычная задача: динамический сайт, front-end - nginx, back-end -
fastcgi на перле. Нужно кэшировать все в memcached.
Скрипты при обращении к ним отдают страницу и пишут ее в memcached,
где ее потом находит nginx при втором обращении к этой же странице.
Конфиг nginx:
location / {
default_type text/html; charset windows-1251;
memcached_pass localhost:11211;
error_page 404 = /backend/;
}
location /backend/ {
# грязный хак?
rewrite .* $request_uri;
# список айтемов
rewrite ^(/?.*/)$ /cgi-bin/index.pl?qs=$1? last;
# детали айтема
rewrite ^/item/(\d+)/$ /cgi-bin/details.pl?it=$1? last;
# остальные - в сад
return 404;
}
location /cgi-bin/details.pl {
fastcgi_pass unix:/tmp/details.sock;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
}
location /cgi-bin/index.pl {
fastcgi_pass unix:/tmp/index.sock;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
}
Эта конструкция вполне работает. Вопрос: можно ли сделать как-то
элегантнее? Особенно волнует конструкция
# грязный хак?
rewrite .* $request_uri;
без которой не обойтись, поскольку после 'error_page 404 = /backend/'
$uri имеет значение /backend/. Может опытные товарищи делают как-то
иначе? Как правильно?
Будет ли лучше в скриптах писать страницу в memcached, а nginx'у
отдавать только internal redirect на нее?
2.
Как вы запускаете standalone perl fastcgi? Я использую сейчас
FCGI::ProcManager, но хочется, чтобы он все-таки отцеплялся от
терминала и висел демоном. Достаточно ли будет fork и detach?
Попробовал сделать как в Catalyst::Engine::FastCGI, но результат
нестабильный - в паре запусков из 10 скрипт молча выходит и не слушает
сокет. Magic. Посоветуйте что-нибудь? Как делаете вы?
Заранее спасибо за ответы :)
--
С уважением,
Игорь Винокуров
Здравствуйте.
Запутался совсем, необходимо написать модуль который бы отдавал файл и
делал инсерт в базу после того, как файл будет полностью отправлен. По
суте обычный счетчик. В конфиге написал:
location /files {
perl getfile::handler;
}
location /insert {
internal;
perl insfile::handler;
}
В getfile.pm следующее:
...
$r->allow_ranges;
$r->send_http_header;
$r->sendfile($fn);
$r->internal_redirect("/insert?sid=$sid");
return OK;
...
Проблема в том, что докачка не поддерживается /insert вызывается
всякие раз когда запрос закончен, даже если файл не докачен полностью.
Пробовал вызывать /insert через post_action но не догадался как
передать нужный мне параметр.
Или нужно самостоятельно парсить заголовки? Что Я делаю не так?