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>
Другие вопросы по тегам