我剛剛在運行自訂應用程式的 Apache2/PHP5 伺服器上啟用mod_mem_cache
,並對結果感到震驚。突然間,提供了錯誤的圖像,我注意到有一次對 HTML 頁面的請求卻提供了 CSS 頁面!可能是什麼原因造成的?配置如下:
快取啟用記憶體 / MCache大小 204800 快取預設過期 3600 CacheIgnoreHeaders 設定-Cookie MCacheMinObjectSize 100 MCache最大物件大小 5242880 MCacheRemoval演算法LRU
答案1
在 mod_cache 和 mod_*_cache 內部,查找鍵是規範 URI 和任何 Vary: 參數(用於協商內容)的相當長的校驗和。這些查找鍵發生衝突的可能性極小,因此,如果您收到上述配置的錯誤回應,那麼這似乎是一個錯誤。
我是快取模組的作者之一,如果您可以將請求的詳細資訊郵寄給我([電子郵件受保護]) 和[電子郵件受保護],或提交一個錯誤,其中包含一些我們可以用來重現的詳細資訊 -http://httpd.apache.org/bug_report.html- 我們可以繼續下去。
或隨時將它們發佈在這裡,我們將解決這個問題。
答案2
我發現了問題。我使用 mod_rewrite 重寫 PHP 腳本中不存在的檔案的 URL,該腳本會將這些 URL 分派到正確的模組。因為所有這些虛擬 URL 都被重寫為相同的 URL,所以 mod_cache 變得混亂。為了解決這個問題,我更改了 Apache 配置的以下部分:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* /dispatch.php
到:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /dispatch.php/$1
現在快取似乎運作得很好!