2015-07-03 4 views
0

Мне нужно установить proxy_pass для шаблона ниже.Конфигурирование множественных параметров proxy_pass с ngnix

location ~ ^/hosts/bu/(.*)/app/(.*)$ { 
    proxy_pass http://appserver.cnma.com:3000/hosts/bu/$1/app/$2; 
} 

Когда я пытаюсь с URL-адресом, он не передает второй параметр правильно. Пожалуйста, дайте мне знать, где я ошибаюсь.

+0

какой-либо причине против простого 'местоположения/хостов/бушель/{proxy_pass http://appserver.cnma.com:3000 } '? –

+0

Можете ли вы привести пример URL-адреса, который вы хотите вызвать? – danielgpm

+0

Спасибо @Alexey. Позвольте мне попробовать это решение и вернуться к вам с результатом. – zilcuanu

ответ

0

ориг docs говорят:

Если proxy_pass указан без URI, то URI запроса передается на сервер в той же форме, отправленного клиентом, когда первоначальный запрос обрабатывается, или полный нормализуется запрос URI передаются при обработке измененной URI:

location /some/path/ { 
    proxy_pass http://127.0.0.1; 
} 

Так что достаточно:

proxy_pass http://appserver.cnma.com:3000$request_uri; 
+0

Если параметры URL-адреса закодированы в браузере, будет ли перенаправление proxy_pass с кодировкой? Я вижу, что кодирование удаляется при использовании prosy_pass. Пожалуйста, объясни. – zilcuanu

+0

Кажется, вы хотите сохранить исходный URI как есть, попытайтесь добавить ** $ request_uri **, я обновил ответ выше – Anatoly

0

вы можете использовать именованный захват в п ginx при использовании регулярных выражений

location ~ ^/hosts/bu/(.*)/app/(.*)$ { 
    proxy_pass http://appserver.cnma.com:3000/hosts/bu/$1/app/$2; 
} 

Вы можете изменить блок ниже, как этот

location ~ ^/hosts/bu/(?<loc1>.+)/app/(?<loc2>.+)$ { 
    proxy_pass http://appserver.cnma.com:3000/hosts/bu/$1/app/$loc2; 
}