Nginx переписывает любое имя аргумента

Я пытаюсь переписать систему CDN, которая использует аргументы для указания на данные. Все данные хранятся в одном и том же месте, поэтому при любой перезаписи необходимо переписать $arg_name с подстановочными знаками, а затем передать значение для данных. Повернув это:

http://cdn.example.com/data/?main_loc=datastring

в это:

http://example.com/datastore/datastring

Используя директиву местоположения, я могу получить запрос в /data/, но оттуда я не знаю, как должна выглядеть перезапись, чтобы выполнить «соответствие любому имени аргумента», например main_loc, backup_loc и т. д., чтобы передать его значение как переписать. Могу ли я применить регулярное выражение для соответствия любому имени $arg_name и использовать его значение?

location ^~ /data/ {
    rewrite ^$arg_(\w*\_\w*)$ http://example.com/datastore/$1;
}

Или как бы это выглядело?

Вы уверены, что ваш исходный URL-адрес действительно выглядит так http://cdn.example.com/data/main_loc?=datastring?

user973254 22.04.2022 23:45

Упс, да небольшая опечатка, извините. Исправлена.

user2280032 23.04.2022 00:10
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
2
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете зафиксировать значение arg с помощью следующей карты:

map $args $arg_value {
    ~=(.*) $1;
}

Затем перенаправьте на него:

location = /data/ {
    return 301 http://example.com/datastore/$arg_value;
}

Проблема в том, что main_loc является одним из возможных местоположений и запускает дополнительные в зависимости от региона, который может называться как угодно _loc, поэтому в имени arg необходим какой-то подстановочный знак или регулярное выражение.

user2280032 23.04.2022 00:27

Я обновил свой ответ, чтобы игнорировать имя аргумента.

Cole Tierney 23.04.2022 00:55

Могу ли я использовать $arg_value при перезаписи, чтобы превратить данные в хранилище данных, или это работает только с перенаправлением? Я бы предпочел использовать перезапись, чтобы уменьшить проблемы с их кешированием браузерами.

user2280032 23.04.2022 01:10

Вы можете попробовать, но мне это не нужно. На самом деле return предпочтительнее rewrite в соответствии с Эта статья.

Cole Tierney 23.04.2022 01:23

Для полноты, как будет выглядеть переписывание? (помогает мне с тестированием, так как main_loc в данный момент находится в том же экземпляре nginx)

user2280032 23.04.2022 05:05

Я попытался перезаписать в /datastore/$arg_value; но это, похоже, не отправляет его в / datastore / местоположение только в /. Есть ли особый способ перезаписи в место на том же сервере?

user2280032 23.04.2022 05:36

Я избегаю переписывать правила, так что я не тот, кто спрашивает. Автор nginx, Игорь Сысоев, объясняет, почему следует соблюдать осторожность при использовании местоположений перезаписи, а также регулярных выражений.

Cole Tierney 23.04.2022 05:52

Другие вопросы по теме