在Ubuntu 16.04上的Apache中配置HTTP内容缓存

2020年12月30日11:26:45 发表评论 53 次浏览

了解如何通过在Apache中设置HTTP内容缓存来提高网站的性能。 Apache能够进行多种缓存, 包括键/值和文件缓存。本教程将重点介绍基本的HTTP内容缓存, 这是Apache缓存的最常用形式。

要求

  • 运行Linux(Ubuntu 16.04)的云服务器。
  • Apache Web服务器已安装并正在运行。

有关设置Apache网站的更多信息, 请参阅我们关于该主题的文章.

Apache缓存状态

Apache的HTTP缓存系统认为其内容处于以下三种状态之一:

  • 新鲜:无需检查即可提供的新内容。
  • 陈旧:根据你设置的规则已过期的内容, 需要检查以获取新副本。
  • 不存在的:缺少的内容。

Apache收到请求后, 将检查生存时间(TTL)时间戳。如果TTL过期, Apache将重新检查该内容以查看是否有更新的版本。

  • 如果有更新的版本:Apache将获取该内容并将其存储, 直到新的TTL过期为止。
  • 如果现有版本尚未更新:Apache将更新文件上的TTL并继续提供服务, 直到TTL过期为止。

Apache使用mod_cache模块评估内容上的TTL, 并确定收到请求后该怎么做。它使用mod_cache_disk模块将数据存储在磁盘上。

Apache缓存放置

在配置HTTP缓存之前, 你需要决定是否将缓存放置在Web服务器的前面还是后面。

CacheQuickHandler是确定将缓存放置在何处的设置。

Web服务器前的缓存

IfCacheQuickHandler被设置为On, 将在咨询Apache之前检查缓存。

这是一种提供内容的快速方法, 因为请求不必等待Apache完成请求。然而这是不安全的。因为所有网站内容都放在Web服务器的前面, 所以不会进行身份验证。

这意味着, 如果你有需要用户登录或认证的内容, 则该内容将对请求它的任何人可用。

在配置Apache HTTP缓存时, 请注意CacheQuickHandler默认情况下处于打开状态。如果这将对你的网站造成安全问题, 则需要确保将其打开关.

Web服务器后缓存

IfCacheQuickHandler被设置为关, 请求将从缓存中获取之前先通过Apache。

这种方法的速度不如将高速缓存放在Web服务器的前面, 因为必须通过Apache处理请求。但是, 它允许身份验证, 因此最适合用户在访问内容之前必须登录或进行身份验证的任何内容。

对于本教程, 我们将设置CacheQuickHandlerto关.

启用Apache模块

要设置HTTP缓存, 请先安装apache2-utils包:

sudo apt-get update
sudo apt-get install apache2-utils

启用必要的Apache模块:

sudo a2enmod cache
sudo a2enmod cache_disk
sudo a2enmod expires
sudo a2enmod headers

然后重新启动Apache以使更改生效:

sudo systemctl restart apache2

添加虚拟主机配置

以下配置为例。对于放置在Web服务器后面的基本HTTP缓存, 这是一个很好的起点, 在该缓存中, 内容设置为在上次访问后5分钟过期。

你可以添加和更改许多配置。完整列表可在Apache网站.

最好在逐个域的基础上配置Apache缓存。使用以下命令打开域的Apache配置文件:

sudo nano /etc/apache2/sites-available/example.com.conf

注意:如果尚未配置任何Apache虚拟主机, 则将编辑默认配置文件:

sudo nano /etc/apache2/sites-available/000-default.conf

滚动到文件底部并添加以下行以上读取的行</ VirtualHost>:

CacheQuickHandler off
CacheLock on
CacheLockPath /tmp/mod_cache-lock
CacheLockMaxAge 5
CacheIgnoreHeaders Set-Cookie

<Location />
    CacheEnable disk
    CacheHeader on
    CacheDefaultExpire 800
    CacheMaxExpire 64000
    CacheIgnoreNoLastMod On
    ExpiresActive on
    ExpiresDefault A300
</Location>

保存并退出文件。然后使用以下命令检查配置错误:

sudo apachectl configtest

如果文件中没有错误, 请重新启动Apache以使更改生效:

sudo systemctl restart apache2

测试HTTP缓存

要验证缓存系统是否正常运行, 请检查存储缓存的目录。例如, 首先列出缓存目录的内容:

ls -la /var/cache/apache2/mod_cache_disk/

如果到服务器的流量很少, 并且你刚刚设置了缓存, 则可能只会看到一些项目:

user@localhost:/var/www/html# ls -la /var/cache/apache2/mod_cache_disk/
total 20    
drwxr-xr-x 5 www-data www-data 4096 Feb  1 21:43 .
drwxr-xr-x 3 root     root     4096 Jan  6 03:20 ..
drwx------ 3 www-data www-data 4096 Feb  1 21:42 2
drwx------ 3 www-data www-data 4096 Feb  1 21:42 T

浏览你的网站, 然后再次检查目录:

user@localhost:/var/www/html# ls -la /var/cache/apache2/mod_cache_disk/

总计20 drwxr-xr-x 5 www-data www-data 4096 Feb 1 21:45。 drwxr-xr-x 3根根4096 Jan 6 03:20 .. drwx ------ 3 www-data www-data 4096 Feb 1 21:42 2 drwx ------ 3 www-data www-数据4096 Feb 1 21:43 b drwx ------ 3 www-data www-data 4096 Feb 1 21:42 T

在上面的示例中, 目录b是为了响应查看网站页面之一而创建的。该目录包含服务器的页面缓存。

你还可以使用工具(例如网站上提供的工具)检查网站的缓存SEO网站检查网站orSeomator.

一盏木

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: