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

Alex Vasilenko aa.vasilenko на gmail.com
Пт Мар 26 17:49:32 MSK 2010


Добрый  день,

Известные костыли:

>        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 на jabber.kiev.ua <JID%3Amente на jabber.kiev.ua>
Skype:menterr
mob: +38097-611-45-99


26 марта 2010 г. 16:40 пользователь alk <nginx-forum на nginx.us> написал:

> Добрый день!
>
> Я только начал осваивать 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 на nginx.org
> http://nginx.org/mailman/listinfo/nginx-ru
>
----------- следущая часть -----------
Вложение в формате HTML было извлечено&hellip;
URL: <http://nginx.org/pipermail/nginx-ru/attachments/20100326/51169e29/attachment-0001.html>


Подробная информация о списке рассылки nginx-ru