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. Ограничение состоит в том, что только /goto/ трафик перенаправляется на серверную часть, без /goto/ в URL-адресе внешнего интерфейса, он должен возвращать 404, т.е. даже http://my.frontend.com

goto является статическим, 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 /goto/mytoken, похоже, построен нормально, но серверная часть возвращает 404

xxxx - - [27/May/2016:13:01:56 +0000] "GET /goto/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 Safari/537.36"

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

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

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

Очень ценю подсказку здесь.


person khawarizmi    schedule 27.05.2016    source источник


Ответы (1)


Кажется, вы добавляете большое количество переменных в директиву 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/.

См. это и это для получения дополнительной документации.

person Richard Smith    schedule 27.05.2016
comment
если я попробую выше, 2016/05/27 14:36:53 [ошибка] 7035#0: *12 open() /usr/share/nginx/html/app/kibana не удалось (2: нет такого файла или каталога), клиент: 192.176.1.83, сервер: my.website.com, запрос: GET /app/kibana HTTP/1.1, хост: my.frontend.com, реферер: mywebsite.com/src/index.html - person khawarizmi; 27.05.2016
comment
и если я поставлю proxy_pass my.backend.com:5202 в конце (примечание '/') , это заканчивается той же ситуацией, что и вышеописанная проблема. [/app/kibana в комментарии выше — моя целевая страница по умолчанию на бэкенде] - person khawarizmi; 27.05.2016