Я использую это правило в Nginx
location ~ /app/(?<code>...)/acme/?(?<uri>.*) {
add_header Cache-Control "max-age=0, no-cache, no-store, must-revalidate";
proxy_pass http://int-srv/$code/acme/dev/$uri;
}
Это добавляет заголовок Cache-control, который я написал выше при вызовах
/app/abc/acme
/app/abc/acme/assets
/app/abc/acme/assets/js
/app/abc/acme/assets/css
/app/abc/acme/anything
Я хочу, чтобы заголовок Cache-control применялся только к / app / abc / acme, потому что, когда эта конечная точка вызывается, ответ - это содержимое нашего index.html. Я не хочу кэшировать его, и в настоящее время он отлично работает.
Если вы думаете о создании правила с помощью index.html, к сожалению, это не сработает, потому что я не вижу, что мы делаем вызов непосредственно в файл (/app/abc/acme/index.html) в инструменты отладчика Chrome
Так что в основном это то, что я хочу
/app/abc/acme - apply cache-control no-cache,etc header to this location only
/app/abc/acme/assets - don't want cache-control header
/app/abc/acme/assets/js - don't want cache-control header
/app/abc/acme/assets/css - don't want cache-control header
/app/abc/acme/anything - - don't want cache-control header
Если вы думаете, что я делаю что-то плохое, дайте мне знать.
Вы можете использовать два местоположения, одно из которых соответствует более короткому URL-адресу. Например:
location ~ ^/app(?<code>/...)/acme/(?<stuff>.*)$ {
add_header Cache-Control "max-age=0, no-cache, no-store, must-revalidate";
rewrite ^ $code/acme/dev/$stuff break;
proxy_pass http://int-srv;
}
location ~ ^/app(?<code>/...)/acme$ {
rewrite ^ $code/acme/dev break;
proxy_pass http://int-srv;
}
Имя переменной $uri
уже определен системой, поэтому вам, вероятно, следует использовать другое имя.
Использование компонента URI с proxy_pass
Директива внутри регулярного выражения явно работает, но недокументирована. По факту, документация состояния:
Когда местоположение указано с помощью регулярного выражения. В этом случае директива должна быть указана без URI.
Итак, в моем примере используется rewrite ... break
вместо.