Apache HTTPD mod_expires設定,管理用戶端暫存檔時間
2024-12-20
mod_expires 是 Apache 網頁伺服器的模組,用於設定 HTTP header 中的 Expires 或 Cache-Control 標籤。
這些標籤告訴瀏覽器針對各種檔案的暫存(快取)時間。透過正確的配置,網站可減少伺服器負載、提升網站速度,並改善用戶體驗。
1.檢查是否有載入 mod_expires 模組
通常設定在檔案:
/etc/httpd/conf.modules.d/00-base.conf
LoadModule expires_module modules/mod_expires.so
重新啟動 Apache
$ apachectl graceful
使用命令列,檢查是否已載入 mod_expires
$ apachectl -M | grep expires
expires_module (shared)
2.在 .htaccess 或 httpd.conf 設定
分別設定各檔案格式的暫存時間
設定完後,即可生效
這套用於用戶對各檔案格式的暫存時間:
<IfModule mod_expires.c>
ExpiresActive On
# Images
ExpiresByType image/jpeg "access plus 8 weeks"
ExpiresByType image/gif "access plus 8 weeks"
ExpiresByType image/png "access plus 8 weeks"
ExpiresByType image/webp "access plus 8 weeks"
ExpiresByType image/svg+xml "access plus 8 weeks"
ExpiresByType image/x-icon "access plus 8 weeks"
# Video
ExpiresByType video/webm "access plus 1 year"
ExpiresByType video/mp4 "access plus 1 year"
ExpiresByType video/mpeg "access plus 1 year"
ExpiresByType video/ogg "access plus 1 week"
# Fonts
ExpiresByType font/ttf "access plus 1 year"
ExpiresByType font/otf "access plus 1 year"
ExpiresByType font/woff "access plus 1 year"
ExpiresByType font/woff2 "access plus 1 year"
ExpiresByType application/font-woff "access plus 1 year"
# TEXT, HTMML, CSS, JavaScript
ExpiresByType text/css "access plus 1 year"
ExpiresByType text/javascript "access plus 1 year"
ExpiresByType application/javascript "access plus 1 year"
ExpiresByType text/html "access plus 1 year"
ExpiresByType text/xml "access plus 1 year"
ExpiresByType text/plain "access plus 1 year"
# Others
ExpiresByType application/pdf "access plus 1 year"
ExpiresByType image/vnd.microsoft.icon "access plus 1 year"
</IfModule>
可使用的各種單位:
year
month
week
day
hour
minute
second
另其它寫法:
ExpiresByType text/html A86400
ExpiresByType text/html M86400
A: access 指現在起 +86400 秒(1天) 當暫存到期日
M: modification 指針對相關檔案最後修改時間起, +86400 秒(1天) 當暫存到期日
**用 M 會造成的小問題是,若你檔案是 1個月前修改,那用戶端 就等於永不會暫存此檔案
或
ExpiresByType text/html "access plus 1 month 15 days 2 hours"
ExpiresByType image/gif "modification plus 5 hours 3 minutes"
3.檢查 mod_expires 是否正常運作
$ curl -I https://www.xxxx.tw/images/logo.png
HTTP/2 200
date: Sat, 21 Dec 2024 01:38:06 GMT
content-type: image/png
content-length: 3322
x-content-type-options: nosniff
last-modified: Thu, 05 Dec 2024 00:34:35 GMT
etag: "cfa-6287b1005cd4c"
cache-control: max-age=5184000 <==8 weeks
expires: Tue, 18 Feb 2025 04:53:41 GMT
:::
expires 即是 /images/logo.png 到期日
針對特定目錄,給不同的到期日
例如 針對 /upoad 目錄的 jpeg/png/mp4 檔案,設定為 5分鐘
<Directory "/var/www/html/upload">
Options FollowSymLinks
AllowOverride All
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpeg "access plus 5 minutes"
ExpiresByType image/png "access plus 5 minutes"
ExpiresByType video/mp4 "access plus 5 minutes"
</IfModule>
</Directory>
或是
<VirtualHost *:443>
DocumentRoot /var/www/html
ServerName www.abc.com
<IfModule mod_expires.c>
ExpiresActive On
<Location "/upload">
ExpiresByType image/jpeg "access plus 5 minutes"
ExpiresByType image/png "access plus 5 minutes"
ExpiresByType video/mp4 "access plus 5 minutes"
</Location>
</IfModule>
</VirutalHost>
參考:
留言
相關文章