Назад | Перейти на главную страницу

Настройка Apache в качестве прямого прокси с кэшированием

Я пытаюсь настроить Apache в качестве прямого прокси с кешированием, но похоже, что он работает некорректно. Заставить Apache работать в качестве прокси-сервера не было проблемой, но что бы я ни делал, он ничего не кеширует ни на диск, ни в память. Я уже проверил, что ничего не конфликтует в каталоге mods_enabled с помощью mod_cache (закончил тем, что все это закомментировал), а также попытался переместить все поля, связанные с кешированием, в файл конфигурации для mod_cache. Кроме того, я настроил ведение журнала для запросов кеширования, но в эти журналы ничего не записывается. Ниже представлена ​​моя конфигурация Apache, любая помощь будет принята с благодарностью!

<VIRTUALHOST *:8080>
ProxyRequests On
ProxyVia On
#ErrorLog "/var/log/apache2/proxy-error.log"
#CustomLog "/var/log/apache2/proxy-access.log" common
CustomLog "/var/log/apache2/cached-requests.log" common env=cache-hit
CustomLog "/var/log/apache2/uncached-requests.log" common env=cache-miss
CustomLog "/var/log/apache2/revalidated-requests.log" common env=cache-revalidate
CustomLog "/var/log/apache2/invalidated-requests.log" common env=cache-invalidate
LogFormat "%{cache-status}e ..."

        # This path must be the same as the one in /etc/default/apache2
        CacheRoot /var/cache/apache2/mod_disk_cache

        # This will also cache local documents. It usually makes more sense to
        # put this into the configuration for just one virtual host.

        CacheEnable disk /
        #CacheHeader on
        CacheDirLevels 3
        CacheDirLength 5
##<IfModule mod_mem_cache.c>
#        CacheEnable mem /
#        MCacheSize 4096
#        MCacheMaxObjectCount 100
#        MCacheMinObjectSize 1
#        MCacheMaxObjectSize 2048
#</IfModule>


<Proxy *>
Order deny,allow
Deny from all
Allow from x.x.x.x
#IP above hidden for this post

<filesMatch "\.(xml|txt|html|js|css)$">
ExpiresDefault A7200
Header append Cache-Control "proxy-revalidate"
</filesMatch>

</Proxy>
</VIRTUALHOST>

Это старый пост, но я нашел его в надежде найти свои собственные ответы, поэтому я поделюсь чем смогу, может быть, это будет полезно.

Учитывая то, что вы сказали, я бы:

  1. Убедитесь, что у apache есть доступ на запись в / var / cache / apache2 / mod_disk_cache
  2. Подтвердите, что он может даже что-то кэшировать, заставив его кэшировать все и проверив, что каталог кеша не пуст (полный пример):

    CacheIgnoreNoLastMod On

    CacheDefaultExpire 7200

  3. Если вышеуказанное не работает, я считаю, что проблема не в mod_cache или mod_disk_cache. Остановитесь здесь, если так, иначе продолжайте:

  4. Убедитесь, что запросы к xml | txt | html | js | css являются запросами GET (сомнительно, что это что-то еще).
  5. Убедитесь, что нет заголовка «Авторизация».
  6. Убедитесь, что заголовок Cache-Control private или no-store еще не создан. Если есть, добавьте следующее перед «добавлением заголовка»:

    Заголовок не установлен Cache-Control

  7. Убедитесь, что есть заголовок «Etag», «Last-Modified» или «Expires». (Что, возможно, вы могли бы сделать запрос с публичной стороны прокси, чтобы проверить, действительно ли mod_expire устанавливает заголовок expires?)

  8. Прочтите "Что можно кэшировать?"в обзоре документации по кешированию apache.

Кстати, у меня работает дисковый кеш, но я также не смог понять, как получить% {cache-status} для отображения в журналах.