Nginx
如何清除docker nginx文件記憶體
我有一個在 docker 中執行的 nginx 作為靜態伺服器。當我更新伺服器端文件夾
template.xlsx
文件時。下載仍然返回舊文件,我確定我已將靜態template.xlsx
文件替換為新文件。如何讓 nginx 返回新的 nginx 文件?這是靜態 nginx 配置:server{ listen 443 ssl; ssl_certificate /etc/nginx/conf.d/cert/example.com/fullchain1.pem; ssl_certificate_key /etc/nginx/conf.d/cert/example.com/privkey1.pem; server_name static.example.com; location / { root /usr/share/nginx/html/static; client_max_body_size 50m; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS'; add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization'; index index.html index.htm; } }
我嘗試重新啟動 docker 容器似乎仍然沒有返回新模板。
預設情況下,nginx 使用
off
by expires指令。這意味著 nginx 不會添加或修改“Expires”和“Cache-Control”響應頭欄位。對於靜態文件,這意味著在沒有兩個標頭的情況下客戶端(瀏覽器)可以自由選擇如何記憶體資源(這對您來說是與HTTP 規範相關的未定義行為,因為它可能儲存成功的響應,例如目前會話甚至更長的時間,具體取決於其設置,除非它正在刷新請求(來自瀏覽器的 F5/Ctrl+F5 或If-Modified-Since
,或來自客戶端If-None-Match
的請求標頭)。Cache-Control``Pragma
重新啟動 nginx(或 docker 容器)在這裡根本沒有幫助,因為它是可以使用記憶體文件的瀏覽器/客戶端。在瀏覽器中,您可以使用 DevTools (F12) -> Network 來監視如果您開始下載會發生什麼(以及您的瀏覽器通過請求發送哪些標頭並從 nginx 接收響應)。
你可以:
- 禁用此文件(位置)的記憶體,使用
expires -1;
或添加Cache-Control: no-cache
標題(請注意,不建議完全禁用所有靜態的記憶體,至少不要對更改非常罕見的資源這樣做,例如圖片,樣式和 JS )- 或強制瀏覽器/客戶端使用不同的 URI 重新載入它
template.xlsx?ver=2
,例如發送帶有一些增量後綴的請求,如?ver=...
這裡(或簡單的時間戳);- 或強制瀏覽器/客戶端使用 F5/Ctrl+F5 重新載入它,以防瀏覽器或來自某些 HTTP 客戶端的標頭
Cache-Control: no-cache
;Pragma: no-cache