如何将 HSTS 标头应用于 Apache 中 443 以上的所有虚拟主机

如何将 HSTS 标头应用于 Apache 中 443 以上的所有虚拟主机

我正在寻找在 Apache 中添加 HSTS 标头...

# HSTS / Header Strict Transport Security
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"

... 但我有一个很长的 vhost 列表,用于不同但相关的站点/子站点。我宁愿不必在每个 vhost 定义中都定义它,但我不知道如何在主文件中包含https.conf仅适用于443 / https这些 vhost 版本的设置,因为当您将 HSTS 应用于标准80 / http站点时,它会在验证器中引发警告。

我试过用<IfModule mod_ssl.c>...</IfModule>标签包裹它,但如果我没记错的话,这实际上只是在问SSL模块是否加载? 我尝试过很多不同的搜索方式,但当你不知道要查找的术语时,很难对所有静态内容进行分类。有什么建议吗?谢谢!

答案1

您可以使用<If>指示表达式可用的;请求相关变量

  • REQUEST_SCHEME:请求 URI 的方案部分

    <If "%{REQUEST_SCHEME} == 'https'">
      Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
    </If>
    
  • HTTPSon如果请求使用 https,off否则

    <If "%{HTTPS} == 'on'">
      Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
    </If>
    

相关内容