アクセス集計でうまく数字を記録できていませんでしたが、PHPを少しだけ変えることで、解決できたと思います。
Cocoon
アクセス集計が1になる件
テーマ独自のアクセス集計機能を使って、人気投稿を表示しております。
管理ページでもなんとなくの数字が見えて、分かりやすく、便利に使っていた機能でした。
急に使えなくなって困るということもありますが、アクセス数がずっと「1」というのを見ていると、なんとも悲しい気持ちになるのですよ。。
コード変更を伴う修正を施しましたので、記録を残します。
カウントが1から増えませんでした
発生していた事象です。
アクセス集計できなかったのではなく、1から増えないという状態でした。
1日のうち1まではカウントされていました。
1件のアクセスでも1。
10件のアクセスでも1。
毎日数十件のアクセスがあったとしても、1週間のアクセス数は7。
そういった状態でした。
テーマが提供してくれている機能ですし、簡易版ということも理解した上ですが。
集計できたほうが何かと便利なので、何とかしたかったのです。
分かったこと と 対策
ネット情報を調べていくうちに、ある程度のことが分かってきました。
仮定を導き出すことができ、幸いなことに、対策にもたどり着けました。おかげで問題解決でしょう。
今回の事象は解決できたので、仮定は実証されたはずです。
アクセス集計機能では、同一IPからのアクセスはカウントしないことになっています。
1日1までしかカウントしてくれていなかったので、アクセス元IPが同一となってしまっていたのですね。
アクセス集計用のPHPコードがある
Cocoonテーマでの独自集計です。body
の最後に読み込んでいることが分かりました。
実体は「lib/analytics/access.php
」です。
ただ、これがどこにどうつながっているのかまでは分かりませんでした。
重複カウントを避けるためIPを使っている
もうひとつ、ページアクセスの集計に関係しそうなファイルたちがあります。
そちらが当たりでした。
page-access
というフォルダー内にいくつかのファイルがあります。
ウェブの情報から、ページ情報とIPアドレスを取得してDBに保存し、同じIPからの連続アクセスはカウントしていないことが分かってきました。
上記フォルダー内の access-func.php
にて、そのようなコメントやコードを見つけました。
ここでのポイントは、取得しているIPですね。これで、1日の最大値が1という説明がつきます。
サーバー環境がリバプロかLB(仮定)
これは仮定の話です。(が、当たりでしょう。)
アクセス元IPの取得では、PHPの定義済み変数を使っています。
phpMyAdminで集計用のテーブルを見たとき、IPに入っている値がすべて同じでした。
つまり、変数で取得できるIPが毎回同じになっていると仮定できます。
もちろん「IP」項目に入っている値の詳細仕様は分かりませんでしたが、これくらいしか思いつかなかったというのが正直なところです。
毎回同じIPからのアクセスだと判断されて、どれだけアクセスが来ても、1日1アクセスまでしかカウントされないという状態だと想像できました。
おそらく、サーバーが不調になった時に仕様変更したものと考えられます。
ロードバランサー(LB)を導入したのかもしれないと思っています。
サービス提供社に確認したわけではないので詳細は不明ですが。。
リバースプロキシ(リバプロ)で解決するような問題だったとは思えないのです。
対策コードを実装
仮定を導き出せたところで、対策も分かりました。
PHPの定義済み変数の引数を調整すればよさそうです。
テーマエディターで編集しました。
1行変更のみですが、慎重に。
部分コピペでなるべくリスクを少なく。
マスター側を変えてしまっているので、更新があると先祖返りするかもしれませんね。。
対象ファイル
access-func.php
というファイルを変更しました。
パスは「lib/page-access/access-func.php
」です。
変更内容
アクセス元IPを記録しているところです。
184行目にある $_SERVER
の引数を変更です。SERVER_ADDR
(バージョンアップで 「 REMOTE_ADDR
」になった模様)を HTTP_X_FORWARDED_FOR
に変えます。
その他のところには決して触らないように。
変更後
$last_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
変更前
$last_ip = $_SERVER['SERVER_ADDR'];
もくしは
$last_ip = $_SERVER['REMOTE_ADDR'];
動作検証
おまけのお話です。
当サイトには、2つの検証環境があります。
- ステージング環境
- 兄弟サイト
そして、サーバーサービスにて提供されているバックアップ機能があります。
今回はやってみるしかなかったので、兄弟サイトをバックアップして、本番適用してみました。
ちゃんと動いたので、当ブログにも適用という運びでした。
どきどきしましたが。。w
カウントされるようになりました
対策を施してしばらく経つと、アクセス集計で値が増えていることを確認できました。
もっと長い時間で検証していきますが、これで問題ないでしょう。
人気投稿のランキングも正常化するでしょう。
PC画面で最下部に設置しているものです。
サイトが壊れたりしなくてよかったです。
ご意見やご感想などお聞かせください! コメント機能です。