带有环境变量的 Apache 自定义标头

带有环境变量的 Apache 自定义标头

我尝试使用 Apache 服务器 2.4.6 和 headers_module 通过环境变量**设置自定义 HTTP 标头。

我在端口 80 上的 HTTP VHost 内工作。

一切都按预期进行,基本示例如下:

Header set MyHeader "%D %t"

我已经阅读了 mod_headers 的 Apache 文档:https://httpd.apache.org/docs/2.4/en/mod/mod_headers.html#header

据说可以使用以下方式访问环境变量 %{ENVVARNAME}e

(ENVVARNAME 为 ENV 变量的名称)

我也阅读了其他帖子,但没有真正有效的答案: Apache 使用环境变量设置自定义标头

但我的问题是添加一个标头,而不是像 HOSTNAME 环境值那样标识我的 Apache 服务器

  1. 我试过这个

Header Set X-Serv %{HOSTNAME}e

没有成功:总是显示 X-Serv:{null} 而不是值

  1. 我也尝试过:

SetEnv myvar ${HOSTNAME} Header set X-Serv %{myvar}e

没有成功:它显示在我的 HTTP 标头中:X-Serv:%{myvar}e

我还尝试了其他一些不同的组合:

请注意:我的 HOSTNAME 环境变量存在,并且它在“env”命令中显示拥有 httpd 进程的 apache 用户

任何想法?

答案1

您必须声明要使用的系统环境变量PassEnv指示

一个有效的例子是:

PassEnv HOSTNAME
Header Set X-Serv %{HOSTNAME}e

答案2

找到了一种让它工作的方法:

  • 确保模块已激活(mod_headers)或在必要时激活

    a2enmod headers
    
  • 在 /etc/apache2/envvars 中添加

    export HOSTNAME=`uname -n`
    
  • 条款<VirtualHost>

    Header set apachehost ${HOSTNAME}
    
  • 重新启动或重新加载 httpd 服务

    service apache2 restart
    

答案3

1.确保模块已激活(mod_headers)或在必要时激活

a2enmod headers

2.在/etc/apache2/envvars 中添加

export HOSTNAME1=`uname -n`或者`hostname`

3.in<VirtualHost _default:443>条款

PassEnv HOSTNAME1

Header set X-Server "%{HOSTNAME1}e"

4.重启或者重新加载httpd服务

service apache2 restart

相关内容