2016-05-27 6 views
0

Я бегNginx proxy_pass маршрутов в неправильное место бэкэнда

nginx version: nginx/1.4.6 (Ubuntu) 

То, что я пытаюсь достичь;

  1. запроса от http://my.frontend.com/goto/mytoken
  2. Я хочу, чтобы быть обработаны http://my.backend.com:5202/goto/mytoken
  3. Ограничением является то, что только/Гото/трафик направляется бакэнд, без/Гото/в фронтэнде URL, он должен быть 404 возврата т.е. даже http://my.frontend.com

Гото статична, mytoken отличается для каждого запроса (который известен бакэнду).

Мое серверное определение для этого сценария;

server { 
listen 80; 
server_name my.frontend.com; 

location ~* ^/goto/(.*) { 
    proxy_pass http://my.backend.com:5202/$uri$1$is_args$args; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
} 
} 

Но проблема в том, что; хотя согласно access.log мой URI/Гото/mytoken, кажется, построен хорошо, но бэкенд возвращает 404

хххх - - [27/May/2016: 13: 01: 56 +0000] «GET/Гото/7328372837182382938 HTTP/1.1" 404 69 "http://mywebsite.com/index.html" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537,36 (KHTML, как Gecko) Chrome/50.0.2661.102 Сафари/537,36"

То же сценарий работает хорошо, если у меня ниже, т.е. нет/goto/in location.

server { 
listen 80; 
server_name my.frontend.com; 

location/{ 
    proxy_pass http://my.backend.com:5202; 
    ... 
} 
} 

Действительно оцените подсказку здесь.

ответ

0

Вы, кажется, добавляете большое количество переменных в директиву proxy_pass, и я думаю, что ни один из них не нужен. Вы должны начать с:

location /goto/ { 
    proxy_pass http://my.backend.com:5202; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
} 

Какой будет прозрачно передавать любые URI, который начинается с /goto/.

Для получения дополнительной документации см. this и this.

+0

если я пытаюсь выше, 2016/05/27 14:36:53 [ошибка] 7035 # 0: * 12 открытых() "/ USR/доли/Nginx/html/приложение/kibana" не удалось (2 : Нет такого файла или каталога), клиент: 192.176.1.83, сервер: my.website.com, запрос: «GET/app/kibana HTTP/1.1», хост: «my.frontend.com», referrer: «http: //mywebsite.com/src/index.html " – hammad

+0

, и если я положил proxy_pass http://my.backend.com:5202/ в конце (примечание '/'), он попадает в ту же ситуацию, что и выше, проблема origina , [/ app/kibana в приведенном выше комментарии - моя целевая страница с недостатком на бэкэнд] – hammad