Re: rewrite и параметры $1, $2, ...

2014-08-28 Пенетрантность Aleksandr Sytar
28 августа 2014 г., 15:10 пользователь skeletor nginx-fo...@nginx.us написал:
 В документации по rewrite-модулю нашёл такой пример:

 location /download/ {
 rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break;
 rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra  break;
 return  403;
 }

 Что означают $1, $2? Можно пример запроса?
 Спасибо.


http://www.regular-expressions.info/
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

proxy if cookie + map

2014-08-28 Пенетрантность Синицкий Павел Евгеньевич
Добрый день,

Ситуация следующая: имеется боевой сервер в связке nginx + php-fpm + новая
версия сайта на соседнем сервере, на котором тоже крутится nginx и php-fpm.
Задача такова: на боевом сервере настроить проксирование на новую версию
сайта в зависимости от установленной у посетителя куки.

Сложность в том, что в блок if нельзя завернуть proxy_set_header - на
форумах советуют для этих целей использовать map с сопутствующей ссылкой на
http://nginx.org/ru/docs/http/ngx_http_map_module.html. Никак не могу
понять, как обойтись без if, а только map в моем случае?

Другими словами, конструкция ниже работает только для внутренней сети (в
логах браузера идет подгрузка с ip 192.168.2.146).

server {
...
   if ($http_cookie ~ 'newsitetest') {
set $newsite 1;
   }
...
location ~* ^/(.+)$ {

if ($newsite = 1) {
   proxy_pass http://192.168.2.146;
   break;
}
try_files $uri $uri/ /not_found.php?query_uri=/$1$args;
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.html;
includefastcgi_params;
fastcgi_param  SCRIPT_FILENAME
$document_root$fastcgi_script_name;
}
}

-- 

С уважением
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Как правильно проксировать переменные $https и $scheme

2014-08-28 Пенетрантность Валентин Бартенев
On Thursday 28 August 2014 14:57:34 Константин Осипов wrote:
[..]
 Не работает видимо по тому что нельзя изменять переменные $https и $scheme.
 
 Можно было бы сделать так:
 map $http_x_forwarded_proto $fastcgi_https {
 default '';
 https on;
 }
 
 map $http_x_forwarded_proto $fastcgi_scheme {
 default http;
 https https;
 }
 
 Но я не хотел бы использовать не стандартные переменные потому что ниже в
 секции location я использую переменные $https и $scheme в множестве правил
 с rewrite. Не стандартные переменные создадут неудобства в случае если
 конфигурация изменится.

Какие неудобства?  Один раз выполнить команду поиск'и'замена - вот и всё
неудобство.

 
 Подскажите пожалуйста как правильно решить мою задачу?
 Спасибо.
 

Правильно оставить стандартные переменные в покое.  Они определяют как
запрос пришел к nginx, а он у вас приходит всегда без шифрования.

У вас же другая задача, узнать, как запрос пришел на балансировщик, и для
этой задачи нужно использовать другие переменные.  И хорошо, что в вашей
конфигурации будет это явно отражено, а не завуалированно в виде явного
или неявного переопределения стандартных переменных.

--
Валентин Бартенев
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: proxy if cookie + map

2014-08-28 Пенетрантность Илья Шипицин
мы так делаем

map $http_cookie $u {
  default old;
  ~new-int-rel new;
}


upstream old {
least_conn;
server xxx1;
server xxx2;
server xxx3;
keepalive 10;
}

upstream new {
least_conn;
server xxx1:8585;
server xxx2:8585;
server xxx3:8585;
keepalive 10;
}


..

proxy_pass http://$u;



у вас, видимо, будет, fastcgi вместо http





28 августа 2014 г., 17:41 пользователь Синицкий Павел Евгеньевич
sejo...@gmail.com написал:
 Добрый день,

 Ситуация следующая: имеется боевой сервер в связке nginx + php-fpm + новая
 версия сайта на соседнем сервере, на котором тоже крутится nginx и php-fpm.
 Задача такова: на боевом сервере настроить проксирование на новую версию
 сайта в зависимости от установленной у посетителя куки.

 Сложность в том, что в блок if нельзя завернуть proxy_set_header - на
 форумах советуют для этих целей использовать map с сопутствующей ссылкой на
 http://nginx.org/ru/docs/http/ngx_http_map_module.html. Никак не могу
 понять, как обойтись без if, а только map в моем случае?

 Другими словами, конструкция ниже работает только для внутренней сети (в
 логах браузера идет подгрузка с ip 192.168.2.146).

 server {
 ...
if ($http_cookie ~ 'newsitetest') {
 set $newsite 1;
}
 ...
 location ~* ^/(.+)$ {

 if ($newsite = 1) {
proxy_pass http://192.168.2.146;
break;
 }
 try_files $uri $uri/ /not_found.php?query_uri=/$1$args;
 fastcgi_pass   127.0.0.1:9000;
 fastcgi_index  index.html;
 includefastcgi_params;
 fastcgi_param  SCRIPT_FILENAME
 $document_root$fastcgi_script_name;
 }
 }

 --

 С уважением

 ___
 nginx-ru mailing list
 nginx-ru@nginx.org
 http://mailman.nginx.org/mailman/listinfo/nginx-ru
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: proxy if cookie + map

2014-08-28 Пенетрантность Валентин Бартенев
On Thursday 28 August 2014 15:41:58 Синицкий Павел Евгеньевич wrote:
 Добрый день,
 
 Ситуация следующая: имеется боевой сервер в связке nginx + php-fpm + новая
 версия сайта на соседнем сервере, на котором тоже крутится nginx и php-fpm.
 Задача такова: на боевом сервере настроить проксирование на новую версию
 сайта в зависимости от установленной у посетителя куки.
 
 Сложность в том, что в блок if нельзя завернуть proxy_set_header - на
 форумах советуют для этих целей использовать map с сопутствующей ссылкой на
 http://nginx.org/ru/docs/http/ngx_http_map_module.html. Никак не могу
 понять, как обойтись без if, а только map в моем случае?
 
 Другими словами, конструкция ниже работает только для внутренней сети (в
 логах браузера идет подгрузка с ip 192.168.2.146).
 
 server {
 ...
if ($http_cookie ~ 'newsitetest') {
 set $newsite 1;
}
 ...
 location ~* ^/(.+)$ {
 
 if ($newsite = 1) {
proxy_pass http://192.168.2.146;
break;
 }
 try_files $uri $uri/ /not_found.php?query_uri=/$1$args;
 fastcgi_pass   127.0.0.1:9000;
 fastcgi_index  index.html;
 includefastcgi_params;
 fastcgi_param  SCRIPT_FILENAME
 $document_root$fastcgi_script_name;
 }
 }
 


  location / {

  if ($http_cookie_newsitetest) {
  rewrite ^ /newsite/$uri last;
  }

  fastcgi_pass 127.0.0.1:9000;
  }

  location /newsite/ {
  proxy_pass http://192.168.2.146/;
  }

--
Валентин Бартенев
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: rewrite и параметры $1, $2, ...

2014-08-28 Пенетрантность Maxim Dounin
Hello!

On Thu, Aug 28, 2014 at 07:10:43AM -0400, skeletor wrote:

 В документации по rewrite-модулю нашёл такой пример:
 
 location /download/ {
 rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break;
 rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra  break;
 return  403;
 }
 
 Что означают $1, $2? Можно пример запроса?
 Спасибо.

Рядом, в описании директивы if, это расписано:

: В регулярных выражениях можно использовать выделения, которые 
: затем доступны в виде переменных $1..$9.

http://nginx.org/ru/docs/http/ngx_http_rewrite_module.html#if

Ну а вообще, как уже верно заметили, обращение к выделениям из 
регулярного выражения через переменные $1 и т.п. - это общая 
концепция во множестве мест.

-- 
Maxim Dounin
http://nginx.org/

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: rewrite и параметры $1, $2, ...

2014-08-28 Пенетрантность skeletor
Спасибо, теперь понятно.

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,252919,252926#msg-252926

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: rewrite и параметры $1, $2, ...

2014-08-28 Пенетрантность Peter B. Pokryshev
On Thu, 28 Aug 2014 17:42:08 +0400
Maxim Dounin mdou...@mdounin.ru wrote:

 Hello!
 
 On Thu, Aug 28, 2014 at 07:10:43AM -0400, skeletor wrote:
 
  В документации по rewrite-модулю нашёл такой пример:
  
  location /download/ {
  rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break;
  rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra  break;
  return  403;
  }
  
  Что означают $1, $2? Можно пример запроса?
  Спасибо.
 
 Рядом, в описании директивы if, это расписано:
 
 : В регулярных выражениях можно использовать выделения, которые 
 : затем доступны в виде переменных $1..$9.
 

Кстати для тех кто не знаком с регулярными выражениями, слово выделения
не совсем очевидны в мануале :)

 http://nginx.org/ru/docs/http/ngx_http_rewrite_module.html#if
 
 Ну а вообще, как уже верно заметили, обращение к выделениям из 
 регулярного выражения через переменные $1 и т.п. - это общая 
 концепция во множестве мест.
 
 -- 
 Maxim Dounin
 http://nginx.org/
 
 ___
 nginx-ru mailing list
 nginx-ru@nginx.org
 http://mailman.nginx.org/mailman/listinfo/nginx-ru

-- 
Peter B. Pokryshev p...@valuehost.ru

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: proxy if cookie + map

2014-08-28 Пенетрантность sejo412
К сожалению необходимо в первом случае проксировать fstcgi, а при обращении
к тестовому (если есть кука) проксировать по http

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,252921,252928#msg-252928

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: proxy if cookie + map

2014-08-28 Пенетрантность sejo412
Спасибо, решение уже где-то рядом )
На боевом сервере за все отвечает php-скрипт.
Сделал так:
location / {
  if ($http_cookie ~ 'newsitetest') {
rewrite ^ /newsite/$uri last;
  }
rewrite / /not_found.php?query_uri=/$args;
  }

location ~* ^/(.+)$ {
  if ($http_cookie ~ 'newsitetest') {
rewrite ^ /newsite/$uri last;
  }
  try_files $uri $uri/ /not_found.php?query_uri=/$1$args;
  fastcgi_pass   127.0.0.1:9000;
  fastcgi_index  index.html;
  includefastcgi_params;
  fastcgi_param  SCRIPT_FILENAME
$document_root$fastcgi_script_name;
  fastcgi_param  QWERTY   $document_root$fastcgi_script_name;
}

location /newsite/ {
proxy_pass http://192.168.2.146;
proxy_http_version 1.1;
proxy_set_header Connection ;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
}

После установки куки браузер выдает 500 ошибку, в логах nginx (который
проксирует) ругань на циклический редирект
2014/08/28 18:21:51 [error] 19193#0: *454 rewrite or internal redirection
cycle while processing
/newsite//newsite//newsite//newsite//newsite//newsite//newsite//newsite//newsite//newsite//not_found.php

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,252921,252930#msg-252930

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: proxy if cookie + map

2014-08-28 Пенетрантность Валентин Бартенев
On Thursday 28 August 2014 10:36:36 sejo412 wrote:
 Спасибо, решение уже где-то рядом )
 На боевом сервере за все отвечает php-скрипт.
 Сделал так:
 location / {
   if ($http_cookie ~ 'newsitetest') {

Зачем так усложнять.
В nginx есть специальные переменные для работы с куками: $cookie_*.

К изучению: http://nginx.org/ru/docs/http/ngx_http_core_module.html#variables


 rewrite ^ /newsite/$uri last;
   }
 rewrite / /not_found.php?query_uri=/$args;
   }
 
 location ~* ^/(.+)$ {

Вам не нужен этот location с регуляркой.


   if ($http_cookie ~ 'newsitetest') {
 rewrite ^ /newsite/$uri last;
   }

   try_files $uri $uri/ /not_found.php?query_uri=/$1$args;
   fastcgi_pass   127.0.0.1:9000;
   fastcgi_index  index.html;
   includefastcgi_params;
   fastcgi_param  SCRIPT_FILENAME
 $document_root$fastcgi_script_name;
   fastcgi_param  QWERTY   $document_root$fastcgi_script_name;
 }
 
 location /newsite/ {
 proxy_pass http://192.168.2.146;

Есть большая разница между:

  proxy_pass http://192.168.2.146;

и

  proxy_pass http://192.168.2.146/;

К изучению: http://nginx.org/r/proxy_pass/ru

 proxy_http_version 1.1;
 proxy_set_header Connection ;
 proxy_set_header Host $host;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Forwarded-For
 $proxy_add_x_forwarded_for;
 }
 
 После установки куки браузер выдает 500 ошибку, в логах nginx (который
 проксирует) ругань на циклический редирект
 2014/08/28 18:21:51 [error] 19193#0: *454 rewrite or internal redirection
 cycle while processing
 
/newsite//newsite//newsite//newsite//newsite//newsite//newsite//newsite//newsite//newsite//not_found.php
 

Ваш конфиг целиком должен выглядеть так:

location / {

if ($cookie_newsitetest) {
rewrite ^ /newsite/$uri last;
}

try_files $uri $uri/ /not_found.php?query_uri=$uri$args;

fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.html;

includefastcgi_params;
fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param  QWERTY   $document_root$fastcgi_script_name;
}

location /newsite/ {
internal;

proxy_pass http://192.168.2.146/;
proxy_http_version 1.1;

proxy_set_header Connection ;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

--
Валентин Бартенев
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru