Nginx

記憶體控制無記憶體,但不在 Nginx 中的子文件夾上

  • September 23, 2016

我在 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已由系統定義,因此您可能應該使用不同的名稱。

proxy_pass在正則表達式位置內使用帶有指令的 URI 組件顯然有效,但未記錄在案。事實上,文件指出:

使用正則表達式指定位置時。在這種情況下,應該指定指令而不使用 URI

所以我的例子使用了rewrite ... break

引用自:https://serverfault.com/questions/804920