интерполяция параметров запроса nginx

#nginx

Вопрос:

У меня есть следующая директива, которая отлично работает при запуске в локальном контейнере docker, но когда я запускаю ее в nginx моего бобового стебля, все $arg__myvars отображаются как пробелы.

 add_header          Link '<https://$host/api/oembed/?format=jsonamp;url=https://www.mysite.com/share?_did=$arg__did&_ddid=$arg__ddid&_dv=$arg__dv>; rel="alternate"; type="application/json oembed"; title="$arg__title"';
 

Я отправляю точно такой же завиток обоим, и я вижу аргументы строки запроса в журналах nginx… так что не похоже, что они пропали или что-то в этом роде:

 172.70.114.17 - - [14/Jun/2021:20:19:13  0000] "GET /path/foo?_did=dd0c6fed-b6a8-4c79-8d34-c99336acced3amp;_ddid=9dadb08b-f8e0-4707-b6cb-06efb9530f24 HTTP/1.1" 200 4404 "-" "curl/7.68.0" "x.x.x.x" 
 

http://nginx.org/en/docs/http/ngx_http_core_module.html#var_arg_

Кто-нибудь видел что-нибудь подобное раньше?

Ответ №1:

Наконец, я нашел решение после многих попыток…

У меня было правило перезаписи дальше в блоке местоположения.

Оказывается, что не только перезапись изменяет arg_ встроенные переменные, но и порядок директив в конфигурации совершенно не имеет значения — перезапись всегда происходит до инициализации любой из переменных.

Комментарии:

1. Не совсем так. Для большинства директив порядок не имеет значения, но он не относится к директивам, ngx_http_rewrite_module включающим rewrite одну. Вы можете прочитать главу внутренней документации по внедрению для получения дополнительной информации.