Подтвердить что ты не робот

Исправить прокси-путь в nginx.conf

у нас есть два сервера: A и B. Сервер A доступен по всему миру. У него установлен nginx. Это то, что у меня есть в conf:

location /test {
  proxy_pass http://localserver.com;
}

Что нужно сделать, это перевести addreess http://globalserver.com/test (то есть сервер A) на внутренний адрес сервера http://localserver.com. Однако он добавляет путь к местоположению, то есть itries, чтобы искать http://localserver.com/test, который вообще недоступен. Как я могу сделать прокси-проход для правильного адреса, выбрасывая последнюю часть в местоположении?

4b9b3361

Ответ 1

Это должно сработать. Nginx должен удалить путь "/test" на локальном сервере вверх. Поэтому я могу сказать, что это не причина. Чтобы сделать это немного лучше, попробуйте следующее:

location /test/ {
  proxy_pass http://localserver.com/;
}

2 слэша, которые я добавил в первых двух строках, будут ошибочно совпадать с '/testABC' и отправить неверный запрос на локальный сервер восходящего потока, например.

У вас есть

proxy_redirect

в том же блоке местоположения? Если ваш восходящий локальный сервер перенаправляет, ошибка в этой строке вызовет проблему, описанную вами.

[ ОБНОВЛЕНИЕ] Нашел причину, по которой исходная конфигурация не работала и мои работы: nginx НЕ заменяет часть пути URI, если директива proxy_pass не имеет самого пути URI. Таким образом, мое исправление добавления косой черты (косая черта рассматривается как путь URI) в конце запускает замену пути URI.

Ссылка: http://wiki.nginx.org/HttpProxyModule#proxy_pass

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

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