如何在 Apache / Ubuntu Linux 上啟用快取?

如何在 Apache / Ubuntu Linux 上啟用快取?

我有一個很大(幾兆位元組)的 XML 文件,該文件更新得相當頻繁(每 10 分鐘或更短時間)並獲得大量流量。我想實現一些快取以減少頻寬和伺服器負載。查看 Apache 文檔,我看到了一系列令人眼花繚亂的配置選項,其中涉及 mod_expires、mod_headers 和 mod_cache(及其變體)的各種組合。我最後兜圈子,結果卻不是我所期望的。

如果我知道應該更改什麼,我可以輕鬆編輯各種設定檔。但此刻我在黑暗中摸索,這種感覺從來都不是一種舒服的感覺。所以,也許如果我描述我想要什麼,這裡有人可以拉著我的手說:“這就是你需要做的。”

該檔案(稱為“stuff.xml”)會定期更新,並將新版本複製到該目錄。例如,外部 url 是:http://example.com/stuff.xml。明白了,這部分有效。每當我請求該文件時,我都會得到預期的結果。但文件很大,我想節省頻寬,所以首先我想使用 If-Modified-Since 標頭實現條件 GET 語義。我該怎麼做呢?我已經啟用了 mod_headers 和 mod_expired,並<FilesMatching>按照我在網上看到的無數示例中的建議在 httpd.conf 中添加了該部分,但這並沒有改變發出條件 GET 請求時的行為。我總是得到整個文件的狀態 200。那我到底該如何實現呢?

這將減少不必要的轉移。我還想限制傳輸的資料量。由於這是 XML,對其進行 gzip 壓縮應該可以節省 50% 或更多。我的下一步是以某種方式對檔案進行 gzip 壓縮,如果不太困難的話,將其儲存在記憶體中。這將減少每次存取的資料傳輸,並減少磁碟傳輸。那麼如何實現這種類型的快取呢?

提前致謝。

答案1

我已經使用設定緩存mod_expires,在 <VirtualHost> 定義中

ExpiresActive on
ExpiresByType text/xml "modified plus 5 minutes"   

您可以使用設定壓縮mod_deflate

SetOutputFilter DEFLATE
AddOutputFilterByType DEFLATE text/xml 

答案2

至於為什麼 If-Modified-Since 不起作用,我認為你應該發布配置的相關部分(我假設你已經重新啟動了 Apache)。您可能還想快速解析日誌以查看相同 IP(可能是同一用戶)是否多次取得該 XML 檔案。如果每次都是新用戶或大部分是新用戶,則用戶端快取將無助於減少伺服器上的負載。

對於壓縮,您需要查看mod_deflate 和/或 mod_gzip這裡是 Linux 期刊的較舊比較。

對於記憶體緩存,我認為如果它被訪問得足夠多以至於值得緩存,作業系統可能已經緩存了它。如果檔案上沒有 IO 問題或嚴重延遲,我會相信作業系統能夠完成其工作。

相關內容