質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Amazon RDS

Amazon RDSは、米アマゾン社が提供しているRDBMSサービス。クラウド上でのリレーショナルデータベースの構築および運用が可能です。MySQL/PostgreSQL/Oracle/SQL Serverのインストールを容易にすることができます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

2回答

1014閲覧

設置したアクセスカウンターとgoogleアナリティクスの数が違うのはなぜ?

cambodia

総合スコア12

Amazon RDS

Amazon RDSは、米アマゾン社が提供しているRDBMSサービス。クラウド上でのリレーショナルデータベースの構築および運用が可能です。MySQL/PostgreSQL/Oracle/SQL Serverのインストールを容易にすることができます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2021/01/18 02:03

#概要
プログラミング初心者です。
AWSのEC2とRDSを利用して、phpで動くウェブサイトを作っています。
ウェブサイトは、phpとデータベース(mysql)を使った4択のクイズサイトです。

このサイトのアクセス状況を知りたいと思い、以下のソースコードをindex.phpに設置しました。


<?php $counter_file = 'count.txt'; $counter_lenght = 8; $fp = fopen($counter_file, 'r+'); if ($fp) { if (flock($fp, LOCK_EX)) { $counter = fgets($fp, $counter_lenght); $counter++; rewind($fp); if (fwrite($fp, $counter) === FALSE) { echo ('<p>'.'ファイル書き込みに失敗しました'.'</p>'); } flock ($fp, LOCK_UN); } } fclose ($fp); echo '<p>'; echo ('アクセス数'.$counter.'</em> '); echo '</p>'; ?>

このコードは、https://on-ze.com/archives/1422を参考にさせていただきました。

上記のソースコードによってアクセス数をカウントしようと思っていたのですが、いざ設置すると、異常にアクセスが多くカウントされます。 始めたばかりのウェブサイトなので、誰も知らないはずなのに、どんどんアクセス数が増えていきます。

別でgoogleアナリティクスも設置してますが、googleアナリティクスは正常に動いています。

#関連した問題
上記の異常なアクセス数と関係があるのかわかりませんが、ウェブサイトをAWSで公開して2週間ほどで、データベース接続のファイルに接続されなくなりました。
エラー内容は、

Host ‘********’ is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts’

つまり、データベースへの大量のエラーリクエストで、接続エラーの上限回数を超えたのが原因でした。

この接続エラーについては、EC2で新規のインスタンスを立ち上げてmysqlに接続して、flush hostsを入力して解除できました。
https://teratail.com/questions/315737

#質問

設置したアクセスカウンターが、なぜ異常にカウントされるのか?
異常なカウントは、ロボットによるものなのか?
AWSの接続エラー(many connection errors)は、この異常なアクセスと関係があるのか?

何でも結構ですので、考えられる原因などありましたら教えてくださいませ!
よろしくお願いいたします!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/01/18 02:20

排他ロックが取れないときカウントアップしない動作に見えるけど、これでカウンターと言えるのか?
cambodia

2021/01/18 02:38

ご連絡ありがとうございます。 「アクセスカウンター 設置」で検索して見つけたソースコードをそのまま使いましたので、排他ロックなるものを知らずに使用していました。 つまり、カウンター機能としては良くないものを使っていたということですね。
guest

回答2

0

ベストアンサー

設置したアクセスカウンターが、なぜ異常にカウントされるのか?
異常なカウントは、ロボットによるものなのか?

おそらくはそうかと思われます。
Apacheのアクセスログを確認してみて下さい。
BOTによるアクセスではJavaScriptが実行され無いので、GoogleAnalyticsでは補足できません。

AWSの接続エラー(many connection errors)は、この異常なアクセスと関係があるのか?

異常なアクセスのうち、phpMyAdminを狙ったものが原因でしょうね

投稿2021/01/18 02:23

tanat

総合スコア18713

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/01/18 02:35

ありがちなパス名で設置しない、とかBASIC認証を加えるとか、 なにかしらの対策はしたいよね。 EC2ならphpMyAdminにアクセスできるIPアドレスを絞っちゃうのも手だろうし。
tanat

2021/01/18 02:40 編集

phpMyAdminとWordPressの管理画面のデフォルトパスはBOTの大好物ですしね。。。 CloudFrontとAWS WAFでEC2に辿り着く前に弾いてもいいくらい
cambodia

2021/01/18 02:53

tanatさん、いつもありがとうございます! BOTと呼ばれているのですね。今、検索して調べました。ありがとうございます。 Apacheのアクセスログですね。 やり方を調べてみます。 これは、MACターミナルで、AWSのEC2にアクセスしたのち、 tail access_log のコマンドで見るのでしょうか?
cambodia

2021/01/18 02:56

m6uさん ありがとうございます。 AWSの接続エラー(many connection errors)に対する対策ですね。 ありがとうございます。
tanat

2021/01/18 03:13

そうですね。EC2にsshでログインしてcatやtailなどで確認します。 具体的なアクセスログのパスはApacheの設定によって異なるので、Aapcheの設定ファイルを確認してみて下さい
cambodia

2021/01/18 03:37

tanatさん ありがとうございます。 やってみます。 しかし、また問題が発生しました。 もともと利用していたEC2インスタンスにターミナルコマンドでログインできません。(ちなみに、FTPクライアントソフト【FileZilla(ファイルジラ)】では接続できます) はー。一つ解決してもまた問題が現れるの繰り返しです。 別で質問を立てます。
guest

0

生のアクセスログはチェックしていないのでしょうか?
正確性の怪しいカウンター処理なんかよりも当てになると思うのですが。


排他ロックの件、言及しておくと、
if (flock($fp, LOCK_EX)) {
に対するelseが存在しないので、排他ロックの取得に失敗したときに何もしないことになってる。
(アクセス殺到するなどして)排他ロックが取れないとき、
数ミリ秒待って再度取得を試みるようにwhile()ループにするのも手ですが、
何度やっても取得できない場合に無限ループにならないよう、
例えば10回試してダメだったら諦めるとかやらないといけないはず。

それでも、何かの折にファイル破損してしまうかもしれないので、
本気でカウントしたければデータベースに記録するのがいいかも。

まぁ、そこまでの本気度ではなさそうだし、
せいぜい、特定のアクセス元はカウントせずスルーするようなアルゴリズムを加えるべきでしょうね。

投稿2021/01/18 02:22

編集2021/01/18 02:47
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cambodia

2021/01/18 02:47

はい。確認しておりません。 勉強不足のためアクセスログの見方を知りませんで、今調べております。 やはり、サイトで公開されているソースコードをむやみに使うのは良くないですね。ご指導ありがとうございます!
68user

2021/01/18 04:07

LOCK_NB じゃなくて LOCK_EX なので他プロセスがロック中ならブロックするんじゃないですかね。 何も試さず書いておりますので違っていたらすみません。
cambodia

2021/01/18 04:33

m6uさん 詳しくご指導頂きありがとうございます。 アクセスカウンターを軽く考えておりました。 しっかりとコードも確認して使用しなければなりませんね。 参考にさせていただきます。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問