搭建一個簡易的測速網站 – OpenSpeedTest

前言

通常,我們跟電信業者申請網路後,我們會進行測速,可能使用 speedtest.net 這種網站。但是這是用來測外網的,如果要測內網呢?可能有些人會說 iperf3。確實,他是一個相當好的工具。但像我這麼懶的人呢,還是會覺得有些麻煩。

偶然在網路上看到一款名為 OpenSpeedTest 的工具。我眼睛一亮,感覺這東西不錯。他是一款寫的相當簡單的工具,基本上機器有 Nginx 跟一個資料夾就能用了。是一款在網頁端就能簡單測速,又有圖形化結果的小工具。

安裝工具

你的 Linux 上必須要有 Git、Nginx 等工具。

sudo apt-get -y update && sudo apt-get install -y git nginx nginx-extras

接著,我們進入 /var/www 目錄。

cd /var/www

使用 Git 下載開源專案上的內容

sudo git clone https://github.com/openspeedtest/Speed-Test

因為個人喜好,稍微幫他改個資料夾名稱

sudo mv Speed-Test speedtest

配置 Nginx

這邊我會參考官方 openspeedtest/Nginx-Configuration 的配置,稍微改變一下成我慣用的,你看完也可以參考看看。

進入 /etc/nginx 資料夾

cd /etc/nginx

編輯 nginx.conf 檔案

sudo vim nginx.conf

我們只需要改開頭一些地方就好。

user www-data;
worker_rlimit_nofile 100000;
worker_processes auto;
pid /run/nginx.pid;
error_log /var/log/nginx/error.log;
include /etc/nginx/modules-enabled/*.conf;

events {
    worker_connections 4096;
    multi_accept on;
}

接著進入 /etc/nginx/sites-enabled/ 資料夾

cd /etc/nginx/sites-enabled/

建立一個名為 speedtest 的檔案

sudo vim speedtest

貼上以下內容

server {
    listen 3000;
    listen [::]:3000;
    root /var/www/speedtest;
    index index.html;
    client_max_body_size 35m;
    error_page  405     =200 $uri;
    access_log off;
    gzip off; 
    fastcgi_read_timeout 999;
    log_not_found  off;
    server_tokens off;
    error_log /dev/null;
    tcp_nodelay on;
    tcp_nopush on;
    sendfile on;
    open_file_cache max=200000 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
    open_file_cache_errors off;
    
    location ~ /\.well-known/acme-challenge/ {
        allow all;
        default_type "text/plain";
        root /var/www/speedtest;
        try_files $uri =404;
        break;
    }

    location / {
        add_header 'Access-Control-Allow-Origin' "*" always;
        add_header 'Access-Control-Allow-Headers' 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Mx-ReqToken,X-Requested-With' always;
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
        add_header Cache-Control 'no-store, no-cache, max-age=0, no-transform';
        add_header Last-Modified $date_gmt;
        if_modified_since off;
        expires off;
        etag off;

        if ($request_method = OPTIONS ) {
            add_header Access-Control-Allow-Credentials "true";
            add_header 'Access-Control-Allow-Headers' 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Mx-ReqToken,X-Requested-With' always;
            add_header 'Access-Control-Allow-Origin' "$http_origin" always;        
            add_header Access-Control-Allow-Methods "GET, POST, OPTIONS" always;
            return 200;
        }
    }

    location ~* ^.+\.(?:css|cur|js|jpe?g|gif|htc|ico|png|html|xml|otf|ttf|eot|woff|woff2|svg)$ {
        access_log off;
        expires 365d;
        add_header Cache-Control public;
        add_header Vary Accept-Encoding;
        tcp_nodelay off;
        open_file_cache max=3000 inactive=120s;
        open_file_cache_valid 45s;
        open_file_cache_min_uses 2;
        open_file_cache_errors off;
        gzip on; 
        gzip_disable "msie6";
        gzip_vary on;
        gzip_proxied any;
        gzip_comp_level 6;
        gzip_buffers 16 8k;
        gzip_http_version 1.1;
        gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml;
    }
}

完成後,驗證並重啟 Nginx

sudo nginx -t && sudo systemctl restart nginx

檢視成果

我們在上方設置了 Port 在 3000,所以我們開啟 伺服器IP:3000 就可以看到測速網站。你可以直接進行簡易的測速。

001.jpg

結語

這是一個簡易的測速網站,很適合簡易測內/外網的速度,但是畢竟是網頁,總可能被網頁伺服器等各種因素拖後腿。所以,如果你要一個正式有效的測試環境,還是建議使用 iperf 之類的哦!