ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: разбор аргументов в дин амическом запросе и пере направление


  • To: nginx-ru@xxxxxxxxx
  • Subject: Re: разбор аргументов в дин амическом запросе и пере направление
  • From: Alex Vasilenko <aa.vasilenko@xxxxxxxxx>
  • Date: Fri, 26 Mar 2010 16:49:32 +0200
  • Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :from:date:received:message-id:subject:to:content-type; bh=4FbL2Ik3av+xFyYrl/24mRz+ghvZxYvbaY/a1Ik3TOg=; b=svVA9ewcGt6OcaEVT0JwW69vFbHRy46Ax6aiNs8kV3fvPQiPwg843P3ji+7eG8VsNn Q3zH7dlOhnuQmoUof0nkBqYLXBIKIc+VqR42/fPbtdEqlhz6+D+wyFCqx7NfhNv3p23F 8BTO14NXmCednqU3QAs94oMf/YLyoMM9kVMV4=
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :content-type; b=Nf6MoYbcPBg81GCW+GQCGzpXGXNz5sp+4xr/TgKHWKc/EbDh9QFxqTRY7eE6m8pz0w H4SHNA2+d9t5cgtHn3n9423uzZBvJpOMYCSrS2X9Qfi4mgpsnpJ1lPOJwebKW4n6UYIL ugnAUYZ1ybnMjmdv7s3+WR+/+BTV75a7KPAwc=
  • In-reply-to: <4a827a19cdb05f284a6fbd23e9202567.NginxMailingListRussian@xxxxxxxxxxxxxxx>
  • References: <4a827a19cdb05f284a6fbd23e9202567.NginxMailingListRussian@xxxxxxxxxxxxxxx>

Добрый  день,

Известные костыли:
       if ($arg_l1 = '3') {
               error_page 403 = @test;
               return 403;
       }
       location @test {
               proxy_pass http://mainsite.ru/;
       }
       location /direct {
               proxy_pass http://mymt/;
       }

Alexandr Vasilenko
Web Developer
www.savevid.com
ICQ:284752117/JID:mente@xxxxxxxxxxxxxx
Skype:menterr
mob: +38097-611-45-99


26 марта 2010 г. 16:40 пользователь alk <nginx-forum@xxxxxxxx> написал:
Добрый день!

Я только начал осваивать nginx, и многие вещи мне еще совсем непонятны, поскольку я далек от языков программирования и с трудом понимаю regexp'ы. Но поставленная задача, мне кажется, и не требует глубоких знаний регулярных выражений. Очень надеюсь получить от вас помощь.
Есть сайт, на котором выполняются только динамические запросы при помощи специально написанного cgi-скрипта. Сайт сильно перегружен в дневное время, хочется разгрузить его, отправляя определенные, наиболее частые или наиболее "тяжелые" по времени выполнения запросы на другой сайт, где при помощи upstream организовано выполнение на группе серверов.
Фактически все сводится к проверке наличия тех или иных аргументов и перенаправления на тот или иной location.
Я нашел несколько родственных тем на форуме, в частности:
http://forum.nginx.org/read.php?21,58180
http://forum.nginx.org/read.php?2,54954

Но сделать так, как там приблизительно указано,  у меня не получается.
У меня запросы на сайт могут быть, например, такими:
http://alk.ru:6446/c/xyz.exe?a=1
http://alk.ru:6446/c/xyz.exe?l1=3&l2=2&CL=1&a=0
http://alk.ru:6446/c/xyz.exe?t=1473291_2_3
и т.д.
Я пробую, для проверки, сделать так, чтобы при наличии аргумента l1=3, запрос обслуживался на главном сайте, а если это не так, то уходил на upstream.  Как я понимаю, простой проверкой if это не сработает, нужно обязательно делать rewrite, а потом уже разбирать по location'ам.
Вот как выглядит мой config.

#user  nobody;
worker_processes  1;
#pid        logs/nginx.pid;
events {
   worker_connections  4096;
}
http {
   include       mime.types;
   default_type  application/octet-stream;
   log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                     '$status $body_bytes_sent "$http_referer" '
                     '"$http_user_agent" "$http_x_forwarded_for"';
   #access_log  logs/access.log  main;
   sendfile        on;
   #tcp_nopush     on;
   #keepalive_timeout  0;
   keepalive_timeout  65;
   gzip  on;

       upstream mymt {
   server 172.29.10.88:8080;
   server 172.29.10.10:8080;
       }

   server {
       listen       6446;
       server_name  alk.ru;
       location / {
       set $p "direct";
       if ($arg_l1 = '3') {set $p "test";
       rewrite ... $p last; #вот тут я не понимаю, как и что должно быть написано, мне не нужно ничего заменять в строке запроса, я просто хочу уйти на location /test
       }
       }
       location = /test {
               proxy_pass http://mainsite.ru/;
       }
       location /direct {
               proxy_pass http://mymt/;
       }
   }
}

Как видно выше, я торможу в понимании того, как должно быть правильно сделано перенаправление. В вышеуказанных темах делалось по-разному. В англоязычной человек писал как-то так (я интерпретирую под свои значения)
     rewrite ^(.*)$ /$p$1

В руссскоязычной вообще все сделали "в лоб":

location = / {
if ($arg_l1 = '3') {rewrite ^ /test last;}
proxy_pass http://mymt/;
}
location = /test {
proxy_pass http://mainsite.ru/;
}
То есть, если имеется такой аргумент то отправить на location /test, а если нет, обслужить на mymt.

Очень прошу помочь разобраться с разбором по условию. Подробности приветствуются. Чтение "Директивы модуля ngx_http_rewrite_module" мне, к сожалению, не помогло.

Posted at Nginx Forum: http://forum.nginx.org/read.php?21,68037,68037#msg-68037


_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.