ПРОЕКТЫ 


  АРХИВ 


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: разбор аргументов в дин амическом запросе и пере направление



http {
    map $arg_l1 $backend {
        3        mainsite.ru;
        default  mymt;
    }

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

    server {
        listen       6446;
        server_name  blah.tld;

        location / {
            #
            # После имени переменной нет /
            #
            proxy_pass http://$backend;
        }
    }
}

----- alk <nginx-forum@xxxxxxxx> wrote:
> Добрый день!
> 
> Я только начал осваивать 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

-- 
Regards,
Valery Kholodkov
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.