ちょっと変則的な解決法
NginxとFastCGIの組み合わせで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