2014-01-09 81 views
1

我使用Apache作爲前端http代理。我需要發送一個包含特定環境變量值的頭文件給所有代理請求。就像這樣:如何base64編碼Apache頭?

RequestHeader set myheader %{FOO}e 

的問題是,從環境變量FOO值必須base64編碼。是否有可能在運行中對該報頭值進行b64編碼?

mod_rewrite?子請求?一個自定義模塊? ...

順便說一句,env變量是由另一個apache模塊創建的,我不能修復它。

回答

4

我想通了。使用mod_rewrite到讀/寫標準輸入/從一個外部程序標準輸出這樣的:

ProxyRequests on 
RewriteEngine on 

# 1 
RewriteMap base64map "prg:/bin/b64e" 

# 2 
RewriteRule .* - [E=WIC:${base64map:%{QUERY_STRING}},NE] 

# 3 
RequestHeader set x-b64encoded "%{WIC}e" 

# 4 
RewriteRule ^proxy/.*$ http://localhost:9999 [P] 
  1. 創建名爲base64map一個重寫 - 映射它運行可執行(/bin/b64e)讀取stdin和編碼在stdout。
  2. 重寫規則將查詢字符串(或任何您想要的)傳遞給名爲base64map的映射。輸出用於將apache變量WIC設置爲編碼值。
  3. 的請求報頭x-b64encoded從值在WIC
  4. 最後創建的,則請求被轉發到目的地和報頭被自動包括在該請求。