自分だけの専用プライベートスピードテスト(通信速度計測)サーバーを構築する

2018年7月8日Linux・Ubuntu TipsLinux, Ubuntu, Apache, スピードテスト, 速度計測

世の中には多くのスピードテストソフトが存在している。例えば、有名な「Ookla Speedtest」は、有志が構築したスピードテストサーバーに接続することで回線の速度計測を行うことが出来る。

しかし、Ooklaのスピードテストサーバ−は、先方のサーバーが混雑しているとき、例えば他にたくさんの人が使用している場合には正確な速度計測が出来なくなる。また、昔はプライベート(自分専用)のSpeedtestサーバーを構築することもできたのだが、今は出来なくなってしまった。

そこで、今回は自分専用のスピードテストサーバーを構築することとしてみよう。

使用するスピードテストソフトは「HTML5 Speedtest」

HTML5 Speedtestは、自分のサーバーにインストールすることで、自分専用のスピードテストサーバーを構築するソフトウェアである。そのままインストールすることもできるし、Docker Imageとして構築することも可能だ。

adolfintel/speedtest
speedtest - Self-hosted HTML5 Speedtest. Easy setup, examples, configurable, responsive and mobile friendly. Supports PHP, Node, and more.

以下の機能が一通り揃っているので、AWS等にインストールしても良いし、自宅に安定した回線があるのであれば、自宅サーバーにインストールすることも可能。

  • ダウンロード速度の計測
  • アップロード速度の計測
  • Pingの計測

HTML5で動作するため、様々なプラットフォーム(Mac, Windows, iOS, Android / Chrome, IE, Firefox)から利用可能。

インストール

今回はUbuntu 16.04にDockerイメージを使わないで構築してみる。

HTML5 Speedtest(自分専用のスピードテストサーバー)のインストール

ApacheとPHPのインストール

まず、ApacheとPHPのインストールが必要だ。

$ sudo apt-get install apache2 php

いくつかの依存関係があるので、必要な依存関係も一緒にインストールしておこう。

HTML5 Speedtestにインストール

その後、gitから適当なディレクトリにファイルをインストールする。今回は、/media/speedtestにおくこととした。

$ mkdir /media/speedtest
$ cd /media/
$ git clone https://github.com/adolfintel/speedtest.git

これで、/media/speedtestに必要なファイルがすべて展開される。

VirtualHostの設定

このディレクトリにVirtualHostの設定をする。

<VirtualHost *:443>
        ServerName speedtest.[自ドメイン]
        ServerAdmin [自メールアドレス]
        DocumentRoot /media/speedtest
</VirtualHost>

Locationの設定も忘れないこと。

<Directory /media/speedtest/>
        Options FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>

ここまで出来たら、Aapcheを再起動する。

$ sudo service apache2 restart

Apacheの設定を変更する

以下のコマンドで、Apache2が「KeepAlive On」になっているか確認しよう。

sudo more /etc/apache2/apache2.conf | grep "KeepAlive On"

もし見つけられなかったら、Apache2.confにKeepalive Onを追加しよう。

PHPの設定を変更する

このスピードテストサーバーでは、大容量のファイルをPHPを用いてアップロードするため、そのための設定が必要となる。
まず、PHPの設定ファイルを開く。

$ sudo vim /etc/php/7.0/apache2/php.ini

以下の通り設定を行う。

それぞれの設定を確認し、以下の通りに設定をする。もし面倒であれば、php.iniの一番最後に記載をしておけば良い。

  max_execution_time = 90
  max_input_time = 90
  memory_limit = 128M
  post_max_size = 50M
  upload_max_filesize = 50M

TCPの設定を変更する

/etc/sysctl.confに以下を追記する。

  net.core.wmem_max = 16777216
  net.ipv4.tcp_window_scaling = 1
  net.ipv4.tcp_rmem = 4096 87380 16777216
  net.ipv4.tcp_wmem = 2096 65535 16777216
  net.ipv4.tcp_mem = 98304 131072 196608
  net.core.netdev_max_backlog = 250000
  net.ipv4.tcp_timestamps = 1
  net.ipv4.ip_local_port_range = 1025 61000
  net.ipv4.tcp_congestion_control=htcp

設定の変更を忘れないように。

$ sudo sysctl -p

また、必要に応じてifconfigを用い、パケットサイズの変更を行っておこう。

$ sudo ifconfig [外部に出ているインターフェース] txqueuelen 10000

HTML5 Speedtestにアクセスしてみる

ファイルに入っている「example-basic.html」と「example-chart.html」が、サンプルファイルである。
それぞれにアクセスすると、回線速度を計測することが出来る。

今回は、自端末-自宅サーバーの速度が次のように計測される。

example-basic.html
basi

example-chart.html
chart

外部からHTML5 Speedtest(自分専用のスピードテストサーバー)にアクセスしてみる

Docomo SIM

Docomo SIMで試した見た結果はこんな感じである。

docomo

非常に早い。おそらくCAをしている&深夜に行っているので、こんなに早いスピードが出ているのであろう。

IIJ SIM(Docomo MVNO) -ただし200kbpsの低速モード

mio

200Kbpsの低速モードだとこんな感じ。
最初にブーストがかかっており、その後200Kbps-400Kbps付近にまで抑制されていることが分かる。

ということで、これで他のユーザーに左右されず、安定してスピードテストを行う環境が構築出来た。スピードテストマニアの方は試してみていただきたい。

執筆者紹介

Thir

最新のガジェットを購入してはレビューする、を繰り返しています。このブログでは、ガジェットの紹介のほか、各種サーバーやスマートホームの構築などを提供しています。最近はYouTubeでもレビュー動画やVlogをあげています。(プロフィール