Я не могу отладить эту часть конфигурации nginx:
Я хочу добавить заголовки ко всем запросам на .pdf
файл
Затем я хочу удалить токен, который добавляю в свой каталог veiw, чтобы избежать нежелательного кеширования браузера:
location /static {
location ~* \.pdf$ {
add_header Access-Control-Allow-Origin *;
add_header Content-Disposition 'inline';
}
#Remove Anti cache token
rewrite "^/static[0-9]{10}/(.*)$" /static/$1 last;
...
}
Синтаксической ошибки nginx нет, но запрашивается .pdf
для показывает, что ошибка 404 not found означает, что перезапись не применяется к запросу.
Любая помощь очень ценится
Спасибо
когда nginx
выбирает location
для обработки запроса он может выбрать внутренний или внешний location
блок. Он не объединяет утверждения обоих.
В rewrite
не наследуется вложенными location
. Если вы хотите rewrite
чтобы применить ко всем местоположениям, вы должны поместить его в server
область блока.
Регулярное выражение вашего rewrite
заявление достаточно конкретное, поэтому его можно перемещать как есть.
Например:
rewrite "^/static[0-9]{10}/(.*)$" /static/$1 last;
location /static {
location ~* \.pdf$ {
add_header Access-Control-Allow-Origin *;
add_header Content-Disposition 'inline';
}
...
}
Конечно, может быть более эффективным просто повторить rewrite
заявление в обоих location
блоки.
Альтернативный подход - избежать rewrite
все вместе и используйте регулярное выражение location
удалить маркер защиты от кеширования с помощью alias
директива. Видеть этот документ для большего.
Например:
location ~ "^(?<prefix>/static)[0-9]{10}(?<suffix>/.*)$" {
alias /path/to/root$prefix$suffix;
location ~* \.pdf$ {
add_header Access-Control-Allow-Origin *;
add_header Content-Disposition 'inline';
}
...
}
Обратите внимание, что регулярное выражение location
блок имеет другой порядок оценки для префикса location
блоки. Видеть этот документ для подробностей.
Хотя лучший ответ на этот вопрос - это то, что я выбрал как лучший, я хочу опубликовать решение, которое я использовал для решения моей проблемы. Для добавления заголовка к некоторым запросам необязательно определять вложенный блок местоположения. Вместо этого я использовал if, чтобы проверить условие регулярного выражения и сделать то, что хочу.
Посмотрите на следующий блок, который я написал, чтобы справиться с этим:
location /static {
if ( $request_uri ~* \.pdf$ ) {
add_header Access-Control-Allow-Origin *;
add_header Content-Disposition 'inline';
}
#Remove Anti cache token
rewrite "^/static[0-9]{10}/(.*)$" /static/$1 last;
...
}