ПРОЕКТЫ 


  АРХИВ 


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]

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


  • To: nginx-ru@xxxxxxxxx
  • Subject: разбор аргументов в динам ическом запросе и перена правление
  • From: "alk" <nginx-forum@xxxxxxxx>
  • Date: Fri, 26 Mar 2010 10:40:33 -0400
  • Dkim-signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mickey.jlkhosting.com; s=x; h=Sender:From:Message-ID:Content-Transfer-Encoding:Content-Type:Subject:To:Date; bh=DZ4V1WRQ82XG3fLAWBZ/yJvXM5VGXAhYaN7Ghorten8=; b=JI7kY9AiAIDUa4/1aBR3CW7b9QHPzGtpc87u7DTpG1j6sZo9SZrzlgfu4JV1lVK18lV6CDuCPE/mNYGKVhWGjs8JV/35uyH7BD3baUQs6RdGSvDIEO+WyvAFmCGvXl84;

Добрый день!

Я только начал осваивать 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


 




Copyright © Lexa Software, 1996-2009.