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 было извлечено…
URL: <http://nginx.org/pipermail/nginx-ru/attachments/20100326/51169e29/attachment-0001.html>
Подробная информация о списке рассылки nginx-ru