帶有環境變數的 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」命令中,其中 apache 使用者擁有 httpd 進程

任何想法?

答案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

相關內容