Хобрук: Ваш путь к мастерству в программировании

Прокси-сервер NGINX передает часть URL-адреса запроса

Я хотел бы сделать следующее в своей конфигурации NGINX: я хочу, чтобы прокси-сервер передал параметры пути и запроса, но не включал первый параметр пути (path1).

URL-адрес запроса

https://my-domain.com/path1/path2?query1=some-query

Я хочу, чтобы это proxy_pass для

http://localhost:8000/path2?query1=some-query

Я пробовал со следующим блоком местоположения

location /path1/path2/ {
  proxy_pass http://localhost:8000$request_uri;
  proxy_http_version 1.1;
}

Однако это не приводит к правильной конечной точке, потому что я думаю, что он также включает параметр path1. У меня есть несколько разных маршрутов path2, и поэтому я хочу иметь возможность легко их перехватывать и перенаправлять — без необходимости вручную определять каждый из них следующим образом:

location /path1/path2a/ {
  proxy_pass http://localhost:8000/path2a?query1=some-query;
  proxy_http_version 1.1;
}

location /path1/path2b/ {
  proxy_pass http://localhost:8000/path2b?query1=some-query;
  proxy_http_version 1.1;
}

location /path1/path2c/ {
  proxy_pass http://localhost:8000/path2c?query1=some-query;
  proxy_http_version 1.1;
}

ДОПОЛНИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ:

Я также не могу просто сделать

location /path1/ {
  proxy_pass http://localhost:8000/;
  proxy_http_version 1.1;
}

потому что у меня уже есть блок location /path1/, который обновляется до соединения WebSocket в другой конечной точке:

location /path1/ {
  proxy_pass http://localhost:9000/;
  proxy_http_version 1.1;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection "Upgrade";
}

Я много искал в Интернете, но не смог найти конфигурацию, подходящую для моего конкретного сценария.

10.06.2020

Ответы:


1

Это очень просто:

location /path1/ {
    proxy_pass http://localhost:8000/;
    proxy_http_version 1.1;
}

Прочтите этот вопрос и ответ для получения подробной информации.

Обновлять

Это решение нельзя использовать после того, как OP разъяснит свой вопрос.

Если все дополнительные пути имеют общий суффикс path2:

location /path1/path2 {
    rewrite ^/path1(.*) $1 break; # remove '/path1' URI prefix
    proxy_pass http://localhost:8000;
    proxy_http_version 1.1;
}

Если это не так, замените location /path1/path2 на location ~ ^/path1/(?:path2a|path2b|path2c).

Если вам нужно передать аргументы внутреннего запроса, отличные от тех, которые пришли с запросом, используйте

set $args query1=some-query;

внутри блока локации.

10.06.2020
  • Добрый день, Иван, спасибо за ваш комментарий. Я забыл указать, почему я также не могу этого сделать. Я только что изменил вопрос с дополнительным примечанием. 10.06.2020
  • Новые материалы

    7 полезных библиотек JavaScript, которые вы должны использовать в своем следующем проекте
    Усильте свою разработку JavaScript Есть поговорка «Не нужно изобретать велосипед». Библиотеки — лучший тому пример. Это поможет вам написать сложные и трудоемкие функции простым способом...

    Базовое руководство по переносу концепций обучения в глубокое обучение
    Обзор По мере того, как машинное обучение становится все более мощным и продвинутым, модели, обеспечивающие эту расширенную возможность, становятся все больше и начинают требовать огромного..

    C в C.R.U.D с использованием React-Redux
    Если вы использовали React, возможно, вы знакомы с головной болью, связанной с обратным потоком данных. Передача состояния реквизитам от родительских компонентов к дочерним компонентам может..

    5 обязательных элементов современного инструмента конвейера данных
    В цифровом мире предприятия используют конвейеры данных для перемещения, преобразования и хранения огромных объемов данных. Эти конвейеры составляют основу бизнес-аналитики и играют..

    Случай использования npm3 вместо npm2 для разработки библиотеки
    Некоторое время назад я создал библиотеку на NodeJS, чтобы упростить рендеринг на стороне сервера и клиента. Он использует React и React Router для отображения соответствующего HTML на веб-сайте...

    Локаджит, спасибо, что поделились этой точкой зрения.
    Локаджит, спасибо, что поделились этой точкой зрения. «Вы становитесь сильными, поднимая других, а не опуская их». Мы все можем извлечь уроки из этой цитаты.

    Как простая библиотека может повысить производительность вашего приложения React
    Знакомство с Million.js Виртуальный DOM React не такой быстрый. Но мы не можем обойти это. Если мы хотим React, нам нужно его придерживаться, верно? Нет, есть альтернатива. Million —..