nginx, последовательное выполнение запросов от одного клиента

12
inse3t
На сайте с 08.05.2006
Offline
84
1913

Я знаю что бред, но надо. Каг?

Pavel.Odintsov
На сайте с 13.05.2009
Offline
169
#1

То есть последовательное? Последовательное можно сделать Апачем, с 1м процессом. Но вот никак не Nginx, который проектировался для диаметрально_противоложной_задачи (тысячи запросов, тысячи клиентов одновременно).

Решение по обнаружению DDoS атак для хостинг компаний, дата центров и операторов связи: FastNetMon (https://fastnetmon.com)
inse3t
На сайте с 08.05.2006
Offline
84
#2

Я понимаю. :) Но нужно как-то реализовать... Вероятно ведь есть нечто костыльное?

Pavel.Odintsov
На сайте с 13.05.2009
Offline
169
#3

А что клиент тянет? Статику или проксированный запрос от Апачи? Как вариант, вот: http://wiki.nginx.org/HttpLimitZoneModule

inse3t
На сайте с 08.05.2006
Offline
84
#4

На бекенде апач. Проблема в том что запросы от нгинкса к апачу поступают пачкой.

Надо чтобы запросы к апачу поступали в порядке очереди поступления к нгинксу.

Как вариант попробовал:

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

server {

location / {

limit_req zone=one burst=1 nodelay;

Но выходит интересно, 2 клика - 2 обработки - 1 нормальный ответ и 1 503...

Вообщем даже с неэротичным 503 неполучаеца сделать нечто подходящее...

bugsmoran
На сайте с 18.02.2010
Offline
223
#5

Ну так а упорядочивая поток к Апачу просто на другие запросы будут ответами 503.

Почти ничего не изменится же.

zexis
На сайте с 09.08.2005
Offline
388
#6

В конфигурации NGINX в дерективе limit_req уберите параметр nodelay.

тогда NGINX будут делать задержку если запрсы идут чаще заданного лимита.

inse3t
На сайте с 08.05.2006
Offline
84
#7

bugsmoran, угу, дак как сделать? :)

zexis, не помогает.

rtyug
На сайте с 13.05.2009
Offline
263
#8

всмысле "последовательное выполнение запросов" ? нужно чтобы в очередь ставило или чтобы выдвало ошибку 503?

nginx имеет хороший API, где можно выполнить различные фокусы перед отдачей файла...

Спалил тему: Pokerstars вывод WMZ, etc на VISA 0% или SWIFT + Конверт USD/GBP,etc (net profit $0,5 млрд) (https://minfin.com.ua/blogs/94589307/115366/) Monobank - 50₴ на счет при рег. тут (https://clck.ru/DLX4r) | Номер SIP АТС Москва 7(495) - 0Ꝑ, 8(800) - 800Ꝑ/0Ꝑ (http://goo.gl/XOrCSn)
inse3t
На сайте с 08.05.2006
Offline
84
#9

rtyug, требуемое освещено в полной мере, в чем вопрос?

rtyug
На сайте с 13.05.2009
Offline
263
#10

если нельзя через опции встроенные, то думаю что можно через API...

перед тем как отдается файлы можно сделать какие действия, наприер, на паузу поставить и т.д.

package download;                                                                                                                                            

use strict;
use nginx;
use Crypt::HCE_MD5;

my $dl_key = "re2lgr5";
my $upload_dir="/home/file/cgi-bin/uploads";

sub handler {
my $r = shift;

my $hce = Crypt::HCE_MD5->new($dl_key,"XFile");
($_) = $r->filename=~/\/(\w+)\/[^\/]+$/;
my $l;
tr|a-z2-7|\0-\37|;
$_=unpack('B*',$_);
s/000(.....)/$1/g;
$l=length;
$_=substr($_,0,$l & ~7) if $l & 7;
$_=pack('B*',$_);

my ($srv_id,$file_id,$usr_id,$dx,$id,$dmode,$i1,$i2,$i3,$i4,$expire) = unpack("SLLSA12AC4L", $hce->hce_block_decrypt($_) );
$dx=sprintf("%05d",$dx);

if($r->remote_addr !~ /^$i1\.$i2\./)
{
$r->internal_redirect("/error_wrong_ip.html");
}
elsif($expire<time)
{
$r->internal_redirect("/error_expired.html");
}
elsif(!-f "$upload_dir/$dx/$id")
{
$r->internal_redirect("/error_nofile.html");
}
else
{
$r->header_out("Content-Disposition","attachment");
$r->internal_redirect("/download_$dmode/$dx/$id?id=$file_id&usr=$usr_id".$r->args);
}

return OK;
}

1;

      location /d/ {                                                          

perl download::handler;
}
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий