Apache ExpiresByType&';标题集内容类型';竞赛条件

Apache ExpiresByType&';标题集内容类型';竞赛条件,apache,configuration,apache-config,Apache,Configuration,Apache Config,ExpiresByType对其mimetype由标题集内容类型规则设置的资产没有影响 配置: <Directory /var/www/html> Options Indexes FollowSymLinks MultiViews Order allow,deny allow from all allowoverride none <FilesMatch "health$"> Header set Content-Type "applicatio

ExpiresByType
对其mimetype由
标题集内容类型
规则设置的资产没有影响

配置:

<Directory /var/www/html>
  Options Indexes FollowSymLinks MultiViews
  Order allow,deny
  allow from all
  allowoverride none
  <FilesMatch "health$">
    Header set Content-Type "application/json"
  </FilesMatch>

  # enable expirations:
  ExpiresActive On
  ExpiresDefault "access plus 1 year"

  # expire json after shorter time:
  ExpiresByType application/json "access plus 1 minute"
</Directory>

选项索引跟随符号链接多视图
命令允许,拒绝
通融
不允许超限
标题集内容类型“application/json”
#启用到期:
过期于
ExpiresDefault“访问权限加1年”
#在较短时间后使json过期:
ExpiresByType应用程序/json“访问加1分钟”
所有json文件(扩展名)都会获得适当的
缓存控制:max age=60
头集,但所有匹配
health$
的文件都会收到默认年份(
31536000
)值。我希望这些文件也能在1分钟内过期,因为之前的规则将其内容类型设置为json


看起来在配置中存在一些竞争,即在头设置规则之前执行过期规则。

这里没有竞争,甚至没有任何未定义的顺序,过期内容将始终在“头设置”之前运行,因为执行此操作的模块是如何注册到Apache核心的

需要记住的一件事有助于在Apache中进行此类调查,即在启动时读取配置,并将其存储在相应的模块中,这些模块稍后将在请求处理期间调用。换句话说,在配置文件中对来自不同模块的指令进行排序通常是没有意义的。有意义的是,在请求处理过程中,一个模块启动、参考其配置并进行更改

mod_头和mod_expires都会在响应生成后,在相对较晚的时间运行您要求它们执行的工作。为什么?因为它们都会相对于其他响应头进行更改

如果这里的问题是如何获得一些替代行为,那么部分取决于是什么产生了健康检查的响应(或任何特殊请求)

  • 如果它们是静态文件,您可以简单地使用ForceType,这将发生得更早
  • 如果它们以任何方式都是动态的,那么像ForceType或“Header-early-set”这样的早期指令将不幸地被动态事物认为它知道更好的内容类型来生成的内容所重写

动态文件的一个可能的简单选项是在
FilesMatch

中使用
ExpiresDefault
,您是否知道是否有一个模块执行顺序列表来帮助调试规则执行顺序问题?mod_info可以显示您正常运行模块,甚至在处理的每个阶段都是正确的顺序,但是它很快就会崩溃,因为许多模块在不同的阶段做不同的事情,mod_头和其他的作为响应过滤器,等等。我没有看到一个好的图表试图捕捉重要的东西