Looking Glass直译过来叫“窥镜”,在网络运维领域,它是一套部署在服务器端的网络探测工具。你可以把它理解成一台放在你服务器机房的“测试终端”——用户通过浏览器访问LG页面,远程操作这台“终端”,让它对任意目标IP执行ping、traceroute、MTR,以及下载测速等操作,然后把结果实时显示出来。
方向性很重要:LG是从你的服务器向外探测,而不是从用户家向你的服务器探测。这意味着:如果你把服务器放在美国,用户想测试“从我这里到你服务器下载速度怎么样”,应该用LG的下载测速功能——用户从LG页面下载测试文件,速度是多少,就说明“用户到你的服务器”的实际下载速度是多少。这个结果比任何商家的宣传截图都真实。
一个功能完整的LG页面,至少应该提供三种测试:
- Ping测试:看延迟和丢包
- Traceroute/MTR:看路由路径,辨认真假CN2
- 测速文件下载:看实际可用带宽
本文重点说第三项——测速文件怎么生成、怎么配置。
方案一:用Docker快速部署(推荐)
如果你不想折腾依赖环境,Docker是最省事的方案。
1. 部署基础LG服务
Docker Hub上有一个现成的镜像wikihostinc/looking-glass-server,一行命令就能跑起来:
docker run -it -d --name looking-glass --restart always -p 80:80 wikihostinc/looking-glass-server
参数说明:
--name looking-glass:给容器起个名字,方便后续管理
--restart always:容器挂了自动重启
-p 80:80:把容器的80端口映射到宿主机的80端口
部署完成后,直接访问 http://你的服务器IP 就能看到LG页面。
2. 测试文件在哪?怎么生成的?
wikihostinc/looking-glass-server这个镜像自带测速文件生成功能。你部署完启动容器后,它会自动在容器内部生成若干个不同大小的测试文件(通常是1MB、10MB、100MB、1000MB),用户访问LG页面时,点击对应的下载按钮就能测速。
如果你想自定义测试文件的大小和数量,比如想加一个500MB的文件,需要进入容器手动操作:
# 进入容器
docker exec -it looking-glass bash
# 找到测试文件存放目录(具体路径取决于镜像实现,常见的是 /var/www/html/ 或 /usr/share/nginx/html/)
# 用 dd 命令生成指定大小的文件
dd if=/dev/zero of=/var/www/html/test_500MB.bin bs=1M count=500
dd命令的参数含义:
if=/dev/zero:从零设备读取(全是0)
of=/路径/文件名:输出的目标文件
bs=1M:每次读写1MB
count=500:重复500次,最终生成500MB的文件
生成后,在LG页面的HTML模板里加上对应的下载链接即可。修改模板需要找到容器内或挂载出来的HTML文件,这里就不展开了,不同镜像的路径不太一样。
方案二:基于gmazoyer/looking-glass手动部署
如果你对Docker比较熟悉,想有更大的控制权,可以用gmazoyer/looking-glass这个镜像。它基于PHP+Apache,配置更灵活,社区也比较活跃。
1. 准备工作
在部署之前,先建好数据目录和相关文件:
# 创建目录
mkdir -p /opt/gmazoyer_looking_glass/agent
# 进入目录
cd /opt/gmazoyer_looking_glass
# 创建必要的空文件(后续配置会用到)
touch logo.png
touch config.php
touch looking-glass.log
touch looking-glass.db
# 调整权限,让容器内的www-data用户能读写
chown 33:33 looking-glass.*
2. 配置并启动容器
# 拉取镜像
podman image pull docker.io/gmazoyer/looking-glass
# 或者用docker也可以
# docker pull docker.io/gmazoyer/looking-glass
# 启动容器
podman run --name looking_glass \
--restart unless-stopped \
-v /opt/gmazoyer_looking_glass/logo.png:/var/www/html/logo.png \
-v /opt/gmazoyer_looking_glass/config.php:/var/www/html/config.php \
-v /opt/gmazoyer_looking_glass/looking-glass.db:/var/www/html/looking-glass.db \
-v /opt/gmazoyer_looking_glass/looking-glass.log:/var/log/looking-glass.log \
-v /opt/gmazoyer_looking_glass/agent:/home/agent \
-p 80:80/tcp \
-d docker.io/gmazoyer/looking-glass
关键参数说明:
用-v做了几个目录和文件的挂载,这样你可以在宿主机上直接修改config.php等配置文件,而不用每次都进容器
--restart unless-stopped:除非手动停止,否则重启后自动拉起
3. 配置测速文件
这个镜像的测速文件配置在config.php里。先编辑配置文件:
vi /opt/gmazoyer_looking_glass/config.php
找到与测速文件相关的配置项(通常在$config数组里),示例配置如下:
<?php
$config = array(
// 站点名称
'site_name' => 'My Server Looking Glass',
// 测试文件配置
'test_files' => array(
array('size' => 1, 'unit' => 'MB'), // 1MB
array('size' => 10, 'unit' => 'MB'), // 10MB
array('size' => 100, 'unit' => 'MB'), // 100MB
array('size' => 1000, 'unit' => 'MB'), // 1GB
),
// 其他配置...
);
配置完成后重启容器让配置生效:
podman restart looking_glass
需要注意的是:gmazoyer/looking-glass镜像默认在容器启动时会自动生成配置中声明的测试文件,但如果文件已经存在,它可能不会覆盖。如果你想调整文件大小,建议先删掉旧文件再重启容器,或者进入容器手动生成。
手动生成测试文件的方法:
# 进入容器
docker exec -it looking_glass bash
# 进入网站根目录
cd /var/www/html
# 生成测试文件,比如生成一个200MB的文件
dd if=/dev/zero of=test_200MB.bin bs=1M count=200
# 退出容器
exit
方案三:纯手动搭建(不用Docker)
如果你不想用Docker,也可以直接在服务器上手动部署。这里以Nginx+PHP环境为例。
1. 准备环境
确保服务器上已经装了Nginx和PHP(版本>=5.3,需要PDO with SQLite驱动)。
# Ubuntu/Debian
apt install nginx php8.1 php8.1-fpm php8.1-sqlite3 -y
# CentOS/Rocky
yum install nginx php php-fpm php-sqlite3 -y
2. 下载源码
用git把项目克隆下来:
cd /var/www
git clone https://github.com/gmazoyer/looking-glass.git
或者下载ZIP包解压也行。
3. 配置Nginx
新建一个Nginx站点配置:
server {
listen 80;
server_name your-domain.com; # 换成你的域名或IP
root /var/www/looking-glass;
index index.php index.html;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
}
}
重载Nginx:
nginx -t && systemctl reload nginx
4. 生成测试文件
这一步跟前面Docker方案里的一样,直接在网站根目录用dd生成测试文件:
cd /var/www/looking-glass
# 生成不同大小的测试文件
dd if=/dev/zero of=test_1MB.bin bs=1M count=1
dd if=/dev/zero of=test_10MB.bin bs=1M count=10
dd if=/dev/zero of=test_100MB.bin bs=1M count=100
dd if=/dev/zero of=test_1000MB.bin bs=1M count=1000
5. 修改页面模板让下载按钮指向这些文件
找到index.php或对应的模板文件,在页面上加下载链接,比如:
<a href="/test_1MB.bin">下载1MB测试文件</a>
<a href="/test_10MB.bin">下载10MB测试文件</a>
<a href="/test_100MB.bin">下载100MB测试文件</a>
<a href="/test_1000MB.bin">下载1000MB测试文件</a>
这样用户点击链接,浏览器就会直接下载对应的测试文件,下载速度就是实际可用带宽的直接反映。
生成测试文件的几个注意事项
1. 文件大小怎么选
一般建议至少准备三个档位:
小文件(1MB/10MB):测突发速度和连接建立速度
中文件(100MB):测持续性带宽,这个最有参考价值
大文件(1GB):测长时间稳定吞吐,用来排查是否有突发降速或限速策略
2. 慎用太大的文件
生成1GB以上的测试文件会占用磁盘空间。如果服务器硬盘不大,建议只保留100MB和200MB两个档位就够了。100MB已经能很好地反映出带宽水平,大文件主要是用来排查“前几秒快、后面掉速”这种情况的。
3. 防止被滥用
如果LG页面是公开的,测试文件可能会被频繁下载消耗带宽和流量。建议在Nginx层面做一下限速或频率限制,或者只对特定IP开放。这个看你的实际需求,如果是自用或内部测试,问题不大。
4. 关于dd生成的文件内容
dd if=/dev/zero生成的全是零字节内容,这种文件压缩比极高——如果开启了Nginx的gzip压缩,100MB的文件可能实际传输量只有几KB,测速结果就失真了。建议关闭测速文件路径的gzip压缩:
location /test_*.bin {
gzip off;
}
验证配置是否生效
配置完成后,打开浏览器访问你的LG页面,点击下载测试文件,观察下载速度是否跟服务器带宽匹配。还可以从外部机器用wget或curl测试:
# 测试下载速度
wget -O /dev/null http://你的服务器IP/test_100MB.bin
# 或使用curl显示实时速度
curl -o /dev/null http://你的服务器IP/test_100MB.bin -w "%{speed_download}\n"
如果下载速度稳定在带宽理论值附近(比如100Mbps带宽对应约12MB/s),说明配置成功。
Looking Glass的价值在于把“广告词”变成“可验证的事实”。测速文件的生成其实不复杂,核心就是用dd命令造几个不同大小的文件,然后配到LG页面上让用户下载。关键是把这件事做到位了,自己心里有底,用户也能看到真实数据。
相关内容
