Site icon Mr. 沙先生

Apache 使用 mod_fcgid 抓不到 header

前陣子在更換線上的 Apache + PHP template 的時候遇到某一個專案出現取不到 header 的問題,安裝方式是參考之前實作的「Ubuntu 16.04 安裝 Apache2 + mod_fcgid + mpm_worker 跑 php 7.x

 

一般性的 Header 例如 remote_addr 都很正常,但是發現有一些自定義的 Header 沒有辦法拋到後端 PHP …

 

這個問題一直拖到最近快要檢討的時候抓出來看 … 重新去看了 Apache 的 mod_fcgid 文件後才突破盲點

 

在這個案子要請求的是 Authorization header,這算是很正常的 header,不過在很多的情況下會把 Authorization 這個 header 當成特殊狀況,可能是因為 Authorization 較為敏感

 

而在 mod_fcgid 這邊有提到如果要特別 request header 給後端的話需要使用 FcgidPassHeader 這個參數 (default: none)

 

文中有特別提到 Authorization 要用 FcgidPassHeader 特別處理

Note
Most request headers are already available to the application as environment variables, and generally are prefixed with HTTP_. (Notable exceptions are Content-type and Content-length, which do not have the HTTP_ prefix.) Thus, this directive is only required for request headers that are purposefully omitted, such as Authorization and Proxy-Authorization. Only pass these request headers if absolutely required.

 

這邊示範在 Apache 的 mod_fcgid 加上 FcgidPassHeader 的方式:

$ cat /etc/apache2/mods-enabled/fcgid.conf

<IfModule mod_fcgid.c>
...
FcgidPassHeader Authorization
...
</IfModule>

 

然後 reload Apache,即可抓到 Authorization header

 

 

Exit mobile version