Apache HTTP Server 版本 2.4
描述 | 管理驗證憑證快取,以減輕後端的負載 |
---|---|
狀態 | 基本 |
模組識別碼 | authn_socache_module |
原始檔 | mod_authn_socache.c |
相容性 | 版本 2.3 和之後 |
維護驗證憑證的快取,這樣就不需要針對每個驗證請求進行後端查詢了。
部分使用者使用較高負載的驗證,例如 SQL 資料庫查詢(mod_authn_dbd
),回報過對驗證提供者造成難以接受的負載。一個典型的案例是 HTML 頁面包含數百個物件(影像、指令碼、樣式表、媒體等等),而對頁面的請求會產生數百個有效的立即請求,以驗證額外的內容。
mod_authn_socache
透過維護驗證憑證快取,提供了此問題的解決方案。
認證快取應使用於認證查詢會對伺服器、後端或網路造成顯著負載的情形,由檔案進行認證 (mod_authn_file
) 或 dbm (mod_authn_dbm
) 不太可能受益,因為它們本身就很快速且輕量(儘管在某些情況下,例如網路掛載檔案,快取可能會值得)。其他提供者,例如基於 SQL 或 LDAP 的認證更可能受益,特別是在觀察到效能問題時。在標準模組中,mod_authnz_ldap
管理其自己的快取,因此通常只有 mod_authn_dbd
會從此快取中受益。
針對提供者進行快取的基本規則為
AuthnCacheProvideFor
指令中包含您要為其快取的提供者。AuthBasicProvider
或 AuthDigestProvider
指令中列出您要為其快取的提供者之前的 socache。使用 dbm 作為快取引擎來加速 mod_authn_dbd
的簡單使用範例
#AuthnCacheSOCache is optional. If specified, it is server-wide AuthnCacheSOCache dbm <Directory "/usr/www/myhost/private"> AuthType Basic AuthName "Cached Authentication Example" AuthBasicProvider socache dbd AuthDBDUserPWQuery "SELECT password FROM authn WHERE user = %s" AuthnCacheProvideFor dbd Require valid-user #Optional AuthnCacheContext dbd-authn-example </Directory>
模組開發人員應注意,他們的模組必須使用 mod_authn_socache
才能進行快取。提供了一個單一的選用 API 函式 ap_authn_cache_store,用於快取提供者剛剛查詢或產生的憑證。使用範例可以在 r957072 中取得,其中針對快取啟用了三個驗證提供者。
描述 | 指定一個用於快取金鑰的內容文字列 |
---|---|
語法 | AuthnCacheContext 目錄|伺服器|自訂字串 |
預設值 | AuthnCacheContext 目錄 |
內容 | 目錄 |
狀態 | 基本 |
模組 | mod_authn_socache |
此指令指定一個字串,將與提供的使用者名稱(在 Digest 認證情況下還包括 realm)一起使用來建構快取金鑰。這有助於釐清伺服器上負責不同認證區域的相同使用者名稱。
這兩個特殊值是 目錄
,它使用請求的目錄內容作為字串,以及 伺服器
,它使用虛擬主機名稱。
預設值是 目錄
,這也是最保守的設定。這很可能不是最佳設定,因為它(例如)會讓 $app-base、$app-base/images、$app-base/scripts 和 $app-base/media 各自擁有獨立的快取金鑰。較好的政策是為密碼提供者指定 AuthnCacheContext
,例如 htpasswd 檔案或資料庫表格。
脈絡可以在伺服器不同區域之間共用,其中認證資訊會共用。不過,這有成為跨網站或跨應用程式安全漏洞的潛力,因此此指令不允許在 .htaccess 脈絡中使用。
描述 | 啟用任何地方設定的 Authn 快取 |
---|---|
語法 | AuthnCacheEnable |
內容 | 伺服器設定檔 |
狀態 | 基本 |
模組 | mod_authn_socache |
此指令通常不必使用,只要在 httpd.conf 中的任何地方啟用驗證快取都會用到它。但是,如果 httpd.conf 中沒有開啟它,它預設不會初始化,因此在 .htaccess 中不可用。此指令可確保初始化它,以便在 .htaccess 中使用。
描述 | 指定要快取哪個認證提供者 |
---|---|
語法 | AuthnCacheProvideFor authn-provider [...] |
預設值 | 無 |
內容 | 目錄、.htaccess |
覆寫 | AuthConfig |
狀態 | 基本 |
模組 | mod_authn_socache |
此指令指定要快取的認證提供者。在不在 AuthnCacheProvideFor
指令中列出的提供者找到的認證資料不會快取。
例如,要快取 mod_authn_dbd
或自訂的提供者 myprovider 找到的認證資料,但保留輕量級的提供者(如檔案或 dbm 查詢)找到的認證資料
AuthnCacheProvideFor dbd myprovider
描述 | 選擇要使用的共用的快取後端 |
---|---|
語法 | AuthnCacheSOCache 提供者名稱[:提供者引數] |
內容 | 伺服器設定檔 |
狀態 | 基本 |
模組 | mod_authn_socache |
相容性 | Apache HTTP Server 2.4.7 和更新版本提供了選用的提供者引數 |
這是用於選擇 共用物件快取 的提供者的伺服器範圍設定,後面是該提供者的選用引數。可能的 provider-name 值為「dbm」、「dc」、「memcache」或「shmcb」,每個都必須載入適當的模組。如果未設定,將使用平台的預設值。
描述 | 設定快取條目的逾時時間 |
---|---|
語法 | AuthnCacheTimeout 逾時(秒) |
預設值 | AuthnCacheTimeout 300(5 分鐘) |
內容 | 目錄、.htaccess |
覆寫 | AuthConfig |
狀態 | 基本 |
模組 | mod_authn_socache |
快取驗證資料可能會造成安全問題,不過短期快取不太可能成為問題。通常,良好的解決方案是在解除後端負載所需的時段內快取認證資訊,但不能更久;不過,如果您變更使用者和密碼的頻率很低,可能會採用較長的逾時時間。預設的 300 秒(5 分鐘)既謹慎又足夠,可降低後端負載,例如 dbd(SQL 資料庫查詢)。
請勿將此與會話逾時混淆,會話逾時是完全不同的問題。但是,您可能需要檢查會話管理軟體快取的憑證是否「不小心」延長會話,並在設定逾時時將此納入考量。