OXY NOTES

NginxとFastCGIの組み合わせでHTTP_USER_AGENTが取得できない

ちょっと変則的な解決法

NginxFastCGIの組み合わせでPHPを動作させているサーバ、いわゆるphp-fpmで、ユーザーエージェントを取得しようとPHPファイルで$_SERVER[‘HTTP_USER_AGENT’]と入力しましたが値が取得できません。

おかしいな?ということで使える環境変数を全て書き出してみます。

以下PHPファイル

<?php
foreach($_SERVER as $server_key => $server_val){
	echo $server_key."<br />\n";
}

結果

USER
HOME
FCGI_ROLE
REQUEST_METHOD
CONTENT_TYPE
CONTENT_LENGTH
REQUEST_URI
DOCUMENT_URI
DOCUMENT_ROOT
SERVER_PROTOCOL
GATEWAY_INTERFACE
REMOTE_ADDR
REMOTE_PORT
SERVER_ADDR
REDIRECT_STATUS
SCRIPT_FILENAME
HTTP_HOST
HTTP_X_REAL_IP
HTTP_X_FORWARDED_HOST
HTTP_X_FORWARDED_SERVER
HTTP_X_FORWARDED_FOR
HTTP_CONNECTION
HTTP_CONTENT_LENGTH
HTTP_CACHE_CONTROL
HTTP_ACCEPT
HTTP_ORIGIN
HTTP_CONTENT_TYPE
HTTP_REFERER
HTTP_ACCEPT_ENCODING
HTTP_ACCEPT_LANGUAGE
HTTP_COOKIE
PHP_SELF
REQUEST_TIME_FLOAT
REQUEST_TIME

やはり「HTTP_USER_AGENT」が無いようです。

それならとNginxの設定ファイル「/etc/nginx/nginx.conf」にあるバックエンドサーバ側のPHP設定にある「include fastcgi_params;」を変更します。(最近の流行りだとfastcgi.confらしい)
今回は「/etc/nginx/fastcgi_params」にあるので編集します。

# vi /etc/nginx/fastcgi_params

見てみるとやはりHTTP_USER_AGENTに関する指定が無いようです。公式の設定にしたがって変更します。

最終行に以下を追加

fastcgi_param  HTTP_USER_AGENT    $http_user_agent;

「なぁ~にnginxの設定も簡単じゃないか…」とルンルンで再起動しましたが、「HTTP_USER_AGENT」は相変わらず表示されず…。
スペルや書式を何度確認しても表示されない。

こうなったら何でもやってみようばかりに以下のようにしたら取得できるようになりました。

fastcgi_param  HTTP_UA    $http_user_agent;

HTTP_USER_AGENT」という文字を使わなければ値が取れるようです。
PHP側でユーザーエージェントを取得する場合は$_SERVER[‘HTTP_UA’]とすれば取れるようになりました。

めでたしめでたし

…しかし、これってなんで何でしょうか?原因をご存じの方がいたらコメントお願いしますm(_ _)m