Apache / Ubuntu Linux でキャッシュを有効にする方法は?

Apache / Ubuntu Linux でキャッシュを有効にする方法は?

かなり頻繁に (10 分ごとまたはそれ以下) 更新され、大量のトラフィックが発生する大きな (数メガバイト) XML ファイルがあります。帯域幅とサーバーの負荷を軽減するために、キャッシュを実装したいと考えています。Apache のドキュメントを見ると、mod_expires、mod_headers、mod_cache (およびそのバリエーション) のさまざまな組み合わせを含む、目が回るような構成オプションが並んでいます。結局、ぐるぐる回ってしまい、期待どおりの結果にはなりません。

何を変更するべきかがわかっていれば、さまざまな構成ファイルを編集するのは問題ありません。しかし、現時点では暗闇の中を手探りで作業しているようなもので、決して快適な気分ではありません。したがって、私が何を望んでいるのかを説明すれば、ここにいる誰かが私の手を取って「これはあなたが行う必要があることです」と言ってくれるかもしれません。

このファイル(「stuff.xml」)は定期的に更新され、新しいバージョンがディレクトリにコピーされます。外部 URL は、たとえば次のようになります。http://example.com/stuff.xml理解しました。この部分は機能します。ファイルを要求するたびに、期待どおりの結果が得られます。しかし、ファイルは大きく、帯域幅を節約したいので、まずは If-Modified-Since ヘッダーを使用して条件付き GET セマンティクスを実装したいと思います。これはどのように行うのでしょうか。<FilesMatching>オンラインで見た無数の例で推奨されているように、mod_headers と mod_expired を有効にし、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 Journal の古い比較です。

メモリ キャッシュについては、アクセス頻度が高く、キャッシュする価値がある場合は、OS がすでにキャッシュしている可能性が高いと思います。ファイルの IO 問題や遅延がひどくない場合は、OS が適切に機能することを信頼します。

関連情報