Добрый  день,<div><br></div><div>Известные костыли:</div><div><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">

       if ($arg_l1 = &#39;3&#39;) {</blockquote><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">

               error_page 403 = @test;</blockquote><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">

               return 403;</blockquote><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">

       }</blockquote><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">

       location @test {</blockquote><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">

               proxy_pass <a href="http://mainsite.ru/" target="_blank"><font class="Apple-style-span" color="#000000">http://mainsite.ru/</font></a>;</blockquote><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">

       }</blockquote><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">

       location /direct {</blockquote><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">

               proxy_pass <a href="http://mymt/" target="_blank"><font class="Apple-style-span" color="#000000">http://mymt/</font></a>;</blockquote><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">

       }</blockquote></div><div><br></div><div>Alexandr Vasilenko<br>Web Developer<br><a href="http://www.savevid.com">www.savevid.com</a><br>ICQ:284752117/<a href="mailto:JID%3Amente@jabber.kiev.ua">JID:mente@jabber.kiev.ua</a><br>

Skype:menterr<br>mob: +38097-611-45-99<br>
<br><br><div class="gmail_quote">26 марта 2010 г. 16:40 пользователь alk <span dir="ltr">&lt;<a href="mailto:nginx-forum@nginx.us">nginx-forum@nginx.us</a>&gt;</span> написал:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

Добрый день!<br>
<br>
Я только начал осваивать nginx, и многие вещи мне еще совсем непонятны, поскольку я далек от языков программирования и с трудом понимаю regexp&#39;ы. Но поставленная задача, мне кажется, и не требует глубоких знаний регулярных выражений. Очень надеюсь получить от вас помощь.<br>


Есть сайт, на котором выполняются только динамические запросы при помощи специально написанного cgi-скрипта. Сайт сильно перегружен в дневное время, хочется разгрузить его, отправляя определенные, наиболее частые или наиболее &quot;тяжелые&quot; по времени выполнения запросы на другой сайт, где при помощи upstream организовано выполнение на группе серверов.<br>


Фактически все сводится к проверке наличия тех или иных аргументов и перенаправления на тот или иной location.<br>
Я нашел несколько родственных тем на форуме, в частности:<br>
<a href="http://forum.nginx.org/read.php?21,58180" target="_blank">http://forum.nginx.org/read.php?21,58180</a><br>
<a href="http://forum.nginx.org/read.php?2,54954" target="_blank">http://forum.nginx.org/read.php?2,54954</a><br>
<br>
Но сделать так, как там приблизительно указано,  у меня не получается.<br>
У меня запросы на сайт могут быть, например, такими:<br>
<a href="http://alk.ru:6446/c/xyz.exe?a=1" target="_blank">http://alk.ru:6446/c/xyz.exe?a=1</a><br>
<a href="http://alk.ru:6446/c/xyz.exe?l1=3&amp;l2=2&amp;CL=1&amp;a=0" target="_blank">http://alk.ru:6446/c/xyz.exe?l1=3&amp;l2=2&amp;CL=1&amp;a=0</a><br>
<a href="http://alk.ru:6446/c/xyz.exe?t=1473291_2_3" target="_blank">http://alk.ru:6446/c/xyz.exe?t=1473291_2_3</a><br>
и т.д.<br>
Я пробую, для проверки, сделать так, чтобы при наличии аргумента l1=3, запрос обслуживался на главном сайте, а если это не так, то уходил на upstream.  Как я понимаю, простой проверкой if это не сработает, нужно обязательно делать rewrite, а потом уже разбирать по location&#39;ам.<br>


Вот как выглядит мой config.<br>
<br>
#user  nobody;<br>
worker_processes  1;<br>
#pid        logs/nginx.pid;<br>
events {<br>
    worker_connections  4096;<br>
}<br>
http {<br>
    include       mime.types;<br>
    default_type  application/octet-stream;<br>
    log_format  main  &#39;$remote_addr - $remote_user [$time_local] &quot;$request&quot; &#39;<br>
                      &#39;$status $body_bytes_sent &quot;$http_referer&quot; &#39;<br>
                      &#39;&quot;$http_user_agent&quot; &quot;$http_x_forwarded_for&quot;&#39;;<br>
    #access_log  logs/access.log  main;<br>
    sendfile        on;<br>
    #tcp_nopush     on;<br>
    #keepalive_timeout  0;<br>
    keepalive_timeout  65;<br>
    gzip  on;<br>
<br>
        upstream mymt {<br>
    server <a href="http://172.29.10.88:8080" target="_blank">172.29.10.88:8080</a>;<br>
    server <a href="http://172.29.10.10:8080" target="_blank">172.29.10.10:8080</a>;<br>
        }<br>
<br>
    server {<br>
        listen       6446;<br>
        server_name  <a href="http://alk.ru" target="_blank">alk.ru</a>;<br>
        location / {<br>
        set $p &quot;direct&quot;;<br>
        if ($arg_l1 = &#39;3&#39;) {set $p &quot;test&quot;;<br>
        rewrite ... $p last; #вот тут я не понимаю, как и что должно быть написано, мне не нужно ничего заменять в строке запроса, я просто хочу уйти на location /test<br>
        }<br>
        }<br>
        location = /test {<br>
                proxy_pass <a href="http://mainsite.ru/" target="_blank">http://mainsite.ru/</a>;<br>
        }<br>
        location /direct {<br>
                proxy_pass <a href="http://mymt/" target="_blank">http://mymt/</a>;<br>
        }<br>
    }<br>
}<br>
<br>
Как видно выше, я торможу в понимании того, как должно быть правильно сделано перенаправление. В вышеуказанных темах делалось по-разному. В англоязычной человек писал как-то так (я интерпретирую под свои значения)<br>
      rewrite ^(.*)$ /$p$1<br>
<br>
В руссскоязычной вообще все сделали &quot;в лоб&quot;:<br>
<br>
location = / {<br>
if ($arg_l1 = &#39;3&#39;) {rewrite ^ /test last;}<br>
proxy_pass <a href="http://mymt/" target="_blank">http://mymt/</a>;<br>
}<br>
location = /test {<br>
proxy_pass <a href="http://mainsite.ru/" target="_blank">http://mainsite.ru/</a>;<br>
}<br>
То есть, если имеется такой аргумент то отправить на location /test, а если нет, обслужить на mymt.<br>
<br>
Очень прошу помочь разобраться с разбором по условию. Подробности приветствуются. Чтение &quot;Директивы модуля ngx_http_rewrite_module&quot; мне, к сожалению, не помогло.<br>
<br>
Posted at Nginx Forum: <a href="http://forum.nginx.org/read.php?21,68037,68037#msg-68037" target="_blank">http://forum.nginx.org/read.php?21,68037,68037#msg-68037</a><br>
<br>
<br>
_______________________________________________<br>
nginx-ru mailing list<br>
<a href="mailto:nginx-ru@nginx.org">nginx-ru@nginx.org</a><br>
<a href="http://nginx.org/mailman/listinfo/nginx-ru" target="_blank">http://nginx.org/mailman/listinfo/nginx-ru</a><br>
</blockquote></div><br></div>