Apache mod_cache и mod_deflate?
У нас есть Apache 2.2 с mod_cache и mod_deflate среди других модулей. Проблема в том, что если мы добавим заголовок Vary, как в документации Apache...
# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
... мы получаем копию обслуживаемого ресурса для каждого варианта пользовательского агента в нашем кэше. Это приводит к бесполезному использованию дискового пространства и снижению частоты попаданий.
Итак, что является предпочтительным решением для этой проблемы? Отбросить заголовок Vary и сжать только "безопасные" ресурсы, такие как обычный HTML?
1 ответ
Причина установки заголовка в зависимости от пользовательского агента состоит в том, что рекомендуемая конфигурация Apache для mod_deflate предоставляет несжатые версии некоторого содержимого пользователям Netscape 4. Вероятно, теперь пользователей Netscape 4 достаточно мало, чтобы вы могли просто предоставлять сжатый контент всем браузерам, которые утверждают, что поддерживают его, и не зависят от пользовательского агента.
Итак, вместо рекомендуемой конфигурации:
<Location />
# Insert filter
SetOutputFilter DEFLATE
# Netscape 4.x has some problems...
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# Don't compress images
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png)$ no-gzip dont-vary
# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
</Location>
Вы можете просто иметь:
<Location />
# Insert filter
SetOutputFilter DEFLATE
# Don't compress images
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png)$ no-gzip dont-vary
</Location>