LOADING

加载过慢请开启缓存 浏览器默认开启

默白的小窝

systemd-mount实现nfs开机自动挂载

NAS 2025/4/10

前言

使用/etc/fstab进行nfs开机挂载时候经常会遇到其他依赖服务没启动完成等问题导致挂载失败,同时,使用 /etc/fstab 文件时若遇到硬盘丢失还会导致启动问题,systemd-mount更灵活,也不会因为配置错误导致无法开机。

systemed-mount挂载基础方案

以debian12为例,假如我需要将 192.168.2.9:/volume1/video挂载到/mnt/nas/video,需要在/etc/systemd/system/下创建一个文件mnt-nas-video.mount

注意:由于路径是 /mnt/nas/video,因此文件名需要是 mnt-nas-video.mount

[Unit]
Description=NFS
Wants=network-online.target
After=network-online.target

[Mount]
What=192.168.2.9:/volume1/video
Where=/mnt/nas/video
Type=nfs
Options=_netdev,auto
TimeoutSec=30

[Install]
WantedBy=multi-user.target

该方案的问题

仅仅这样配置,启动时候会遇见Network is unreachable的错误导致挂载失败

network-online.target 并不能保证所有网络服务(如 DNS 解析、路由表完整性等)都已准备好。它只是确保网络接口已启动并分配了 IP 地址。

因此需要引入一个新的service来定义网络是否真正准备好。

wait_for_functioning_dns.service

[Unit]
Description=Make network-online.target dependant on the ability to resolve host.domain
Documentation=https://gitlab.com/ggeurts/extend-network-online.target/-/blob/master/README.md
Requisite=NetworkManager.service
After=NetworkManager.service
Before=network-online.target

[Service]
Type=oneshot
ExecStart=/bin/sh -c '/usr/bin/timeout 3m /bin/sh -c \'while ! /usr/bin/timeout 1 /usr/bin/dig host.domain>/dev/null 2>&1; do /usr/bin/sleep 0.1; done\'&&/usr/bin/echo ""DNS reachable""'
RemainAfterExit=yes

[Install]
WantedBy=network-online.target

该service能够等待dns服务等都启动完成

最终方案

  1. 创建/etc/systemd/system/wait_for_functioning_dns.service,文件内容
[Unit]
Description=Make network-online.target dependant on the ability to resolve host.domain
Documentation=https://gitlab.com/ggeurts/extend-network-online.target/-/blob/master/README.md
Requisite=NetworkManager.service
After=NetworkManager.service
Before=network-online.target

[Service]
Type=oneshot
ExecStart=/bin/sh -c '/usr/bin/timeout 3m /bin/sh -c \'while ! /usr/bin/timeout 1 /usr/bin/dig host.domain>/dev/null 2>&1; do /usr/bin/sleep 0.1; done\'&&/usr/bin/echo ""DNS reachable""'
RemainAfterExit=yes

[Install]
WantedBy=network-online.target
  1. 创建/etc/systemd/system/mnt-nas-video.mount,文件内容
[Unit]
Description=Mount NFS
Wants=wait_for_functioning_dns.service
After=wait_for_functioning_dns.service

[Mount]
What=192.168.2.9:/volume1/video
Where=/mnt/nas/video
Type=nfs
Options=_netdev,auto
TimeoutSec=30

[Install]
WantedBy=multi-user.target
  1. 设置开机启动
sudo systemctl daemon-reload
sudo systemctl enable wait_for_functioning_dns.service
sudo systemctl enable mnt-nas-video.mount
阅读全文

Home Assistant OS修改docker源

Java 2025/4/9

Home Assistant官方系统Home Assistant OS中插件等都是以docker方式管理的,而由于国内的环境,访问docker会存在一些阻碍,因此需要替换源才能顺利使用。

结合网上的教程等,总结一下HassOS更换docker源的方法。

进入shell

HassOS首次进入的时候是在ha中,需要进入shell才能访问文件。

命令行输入login即可

image.png

修改

出自俄罗斯网友方法

curl -s -L mansmarthome.info/udev-latest.tar | tar -x -f - -v -C /etc/udev/rules.d/

vi /etc/udev/rules.d/docker-daemon.json
阅读全文

升级Spring Boot后,校验的注解都失效了的问题

Java 2025/3/28

项目由于老版本Spring Boot存在风险,需要将Spring Boot从2.0.8升级到2.7.18

升级后发现所有接口入参的校验都失效了,经过比对依赖发现是因为少了一个hibernate-validator依赖。

经查阅release note,可知Spring Boot2.3版本开始,就不自带hibernate-validator,项目中如果依旧需要校验功能,就需要手动引入spring-boot-starter-validation

阅读全文

开启SSH Key登录

VPS 2025/3/25

创建公私钥

Xshell

image.png

image.png

密钥类型可以按照实际情况选择。以下列举一下DSA、RSA、ECDSA、ED25519的区别

特性 DSA RSA ECDSA ED25519
原理 基于离散对数问题,使用两个数学函数进行签名和验证。 利用大整数分解难题,通过一对公钥和私钥来加密和解密数据或生成签名。 基于椭圆曲线上的点乘运算的困难性,提供与DSA相似的功能但基于椭圆曲线密码学。 使用扭曲的爱德华兹曲线实现的一种特定形式的数字签名算法,属于椭圆曲线密码学的一部分。
性能 签名速度较快,但在验证签名时效率低于RSA和ECDSA。 签名生成较慢,尤其是使用较大密钥时;验证签名相对较快。 提供了更快的签名和验证速度,尤其是在使用相同安全级别的情况下,比RSA更高效。 在所有操作中都表现出色,特别是在签名生成和验证的速度方面,通常被认为是最快的。
安全性 安全性依赖于参数的选择和随机数生成的质量。若随机数不充分随机,可能导致私钥泄露。 需要足够大的密钥长度以保证安全(推荐至少2048位),同时注意避免常见的攻击手段如侧信道攻击。 相同密钥长度下,比RSA提供更高的安全性。同样需要注意随机数质量的问题。 设计上考虑了防止多种类型的攻击,包括侧信道攻击,提供了强大的安全性保障。
兼容性 被广泛支持,特别是在SSH等协议中,但由于性能和安全性的原因,逐渐被其他算法取代。 广泛应用于各种场景,拥有良好的向后兼容性。 支持度不断增加,尤其是在需要高效和安全解决方案的新系统中。 尽管是一个较新的算法,但由于其优越的性能和安全性,正快速获得支持,尤其在现代软件和协议中。

接下来一路下一步

image.png

下面这一步的给用户密钥加密是用来给私钥加密的,若加密了,使用私钥时还需要私钥的密码才能成功登录

image.png

生成后把公钥保存下来,复制或保存文件,这里边公钥格式有两种,一般默认就行了,下面也简单列举两种的区别

特性 SSH2 - OpenSSH SSH2 - IETF SECSSH
实现方式 开源的SSH协议套件,广泛应用于Linux、Unix、macOS等操作系统。 遵循IETF制定的安全Shell(SSH)协议标准的实现,注重标准化和一致性。
特性集 提供多种额外功能,如端口转发、X11转发、SCP、SFTP等工具。 专注于核心协议功能,可能不包含OpenSSH中的一些扩展功能。
更新频率 拥有活跃的开源社区支持,更新快速,能及时响应安全威胁。 更新依赖于IETF的标准进程,可能较慢,但更注重长期稳定性和一致性。
兼容性 广泛兼容各种操作系统和服务,是许多服务器默认配置的一部分。 更加注重跨平台和供应商之间的互操作性,遵循统一标准。
安全性 安全性强,但可能因附加功能而存在一些潜在风险。 严格遵守IETF定义的安全标准,理论上提供更加一致的安全性保证。
灵活性 功能丰富,支持自定义配置和扩展,适合复杂的实际应用场景。 更加精简,专注于核心功能,可能缺乏某些高级或非标准功能。
社区和支持 拥有庞大的开源社区支持,问题解决和更新速度快。 依赖于IETF标准组织的支持,更新和问题解决速度可能较慢,但更规范。

image.png

最后来到这一步,将私钥导出为文件就行了

image.png

配置公钥(Debian11/12为例)

  1. 进入目录
cd ~/.ssh
  1. 维护公钥
echo "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKVxVGAe95P7J/Nyiiy+aJvWPnC+IMTwLE+VZiY8oLzy/bxmCiE/SQIVtPON3WA+QEcMzj2ei1v1+cNXqBJbfnA=" > authorized_keys
  1. 登录验证一下,然后关闭密码登录
echo "PasswordAuthentication no" > /etc/ssh/sshd_config.d/disablePwdLogin.conf
  1. 重启SSHD,完成
systemctl restart sshd
阅读全文

从报文层面分析HTTP正向代理和反向代理的区别

网络 2025/3/21

从报文层面分析正向代理和反向代理的区别

概念

首先先简单解释下正向代理和反向代理的概念区别

正向代理

正向代理代表客户端向外部服务器发起请求,主要用于绕过限制或提升访问效率。

链路:客户端->代理服务器->目标

反向代理

反向代理则接收客户端请求并分发给后台服务器处理,旨在优化服务性能和增强安全性。

链路:客户端->代理服务器->目标

可见,从链路上来说,正向代理与反向代理几乎是相同的,但是从功能上来说,正向代理可以代表客户端发往几乎任意的目标服务器,而反向代理却只能将请求发往预先配置的目标。

那么他们实际上到底有什么不同呢?

报文分析

直接请求

直接使用curl发送请求

curl http://www.baidu.com

使用tcpdump抓包并丢到wireshark中分析,可得

image.png

image.png

image.png

正向代理

首先使用tinyproxy搭建一个正向代理,这里使用第三方构建的docker镜像来快速部署

docker run -d -p 6666:8888 dannydirect/tinyproxy:latest ANY

然后通过正向代理向http://www.baidu.com发送请求

curl -x 'http://127.0.0.1:6666' http://www.baidu.com

使用tcpdump进行抓包

sudo tcpdump -i any port 6666 or host www.baidu.com -w output.pcap

抓到的pcap包丢到wireshark中进行分析

image.png

image.png

image.png

可见,虽然发送的目标地址已经是127.0.0.1:6666了,但是实际上的HTTP请求报文依旧与不使用代理的时候一样。唯一的不同是多了一个proxy-connection: keep-alive请求头。
该请求头的作用是告诉代理服务器,尝试维持与代理服务器之间的一个持久连接。

反向代理

使用nginx配置一个简单的代理服务器,端口8888,由于对于客户端来说,不知道反向代理后是什么,因此,此时的报文与直接请求是类似的,只是里面所有与目标baidu.com有关的全都为反向代理服务器了。

image.png

image.png

image.png

正向代理如何转发请求?

由上可知,虽然正向代理与反向代理的链路是相同的。
但报文上存在一些差异,IPV4以及TCP的报文都是大同小异的

区别就在于HTTP报文中的Host请求头以及首行的路径。

查看tinyproxy相关代码,定位到reqs.c中的handle_connection函数中的代码段。

connptr->server_fd = opensock (request->host, request->port,
                                               connptr->server_ip_addr);

可见,正向代理服务器是根据request->host, request->port建立与目标地址的连接的

request是使用如下代码行获取的

request = process_request (connptr, hashofheaders);

定位到process_request中的

ret = sscanf (connptr->request_line, "%[^ ] %[^ ] %[^ ]",
               request->method, url, request->protocol);

该行的作用是将connptr->request_line中的字符串进行解析,空格为分界符。

当正向代理时,connptr->request_line值为GET http://www.baidu.com/ HTTP/1.1,那么经过处理后,得到如下结果

request-method:GET
url:http://www.baidu.com/
request->protocol:HTTP/1.1

获得的url会经过extract_url函数处理

static int extract_url (const char *url, int default_port,
                        struct request_s *request)
{
        char *p;
        int port;

        /* Split the URL on the slash to separate host from path */
        p = strchr (url, '/');
        if (p != NULL) {
                int len;
                len = p - url;
                request->host = (char *) safemalloc (len + 1);
                memcpy (request->host, url, len);
                request->host[len] = '\0';
                request->path = safestrdup (p);
        } else {
                request->host = safestrdup (url);
                request->path = safestrdup ("/");
        }

        if (!request->host || !request->path)
                goto ERROR_EXIT;

        /* Remove the username/password if they're present */
        strip_username_password (request->host);

        /* Find a proper port in www.site.com:8001 URLs */
        port = strip_return_port (request->host);
        request->port = (port != 0) ? port : default_port;

        /* Remove any surrounding '[' and ']' from IPv6 literals */
        p = strrchr (request->host, ']');
        if (p && (*(request->host) == '[')) {
                memmove(request->host, request->host + 1,
                        strlen(request->host) - 2);
                *p = '\0';
                p--;
                *p = '\0';
        }

        return 0;

ERROR_EXIT:
        if (request->host)
                safefree (request->host);
        if (request->path)
                safefree (request->path);

        return -1;
}

最终得到

request->host:www.baidu.com
request->port:默认
request->path:/

因此,我们就能够最终确定目标服务器了,并且确定发送过去的报文。

结论

正向代理与反向代理虽然链路相同,但是由于HTTP报文的不同而带来截然不同的行为。
发送给正向代理的报文请求行中的Request-URI(统一资源标识符)带有全路径,以便与代理服务器从中获取到目标地址,从而实现转发。

之前还以为是通过Host请求头获取目标地址的,然后试着Nginx反代配置中直接用proxy-set-header Host xxxx,想着能实现通过正向代理向特定目标转发请求,现在看来这样无法实现。

以上仅为个人的浅薄分析,如有错误请指正。

阅读全文

搬瓦工NODESEEK-BIGGERBOX-PRO,跑个融合怪

VPS 2025/3/21

今天把搬瓦工46美刀传家宝放生了,迁移到了新的NODESEEK-BIGGERBOX-PRO上,简简单单跑个融合怪

                   测评频道: https://t.me/vps_reviews                    
VPS融合怪版本:2025.02.12
Shell项目地址:https://github.com/spiritLHLS/ecs
Go项目地址:https://github.com/oneclickvirt/ecs
---------------------基础信息查询--感谢所有开源项目---------------------
 CPU 型号          : AMD EPYC-Genoa Processor
 CPU 核心数        : 1
 CPU 频率          : 2794.750 MHz
 CPU 缓存          : L1: 64.00 KB / L2: 1.00 MB / L3: 32.00 MB
 AES-NI指令集      : ✔ Enabled
 VM-x/AMD-V支持    : ❌ Disabled
 内存              : 374.20 MiB / 1.01 GiB
 Swap              : 524 KiB / 265.00 MiB
 硬盘空间          : 4.07 GiB / 20.05 GiB
 启动盘路径        : /dev/sda2
 系统在线时间      : 0 days, 6 hour 42 min
 负载              : 0.34, 0.12, 0.03
 系统              : Debian GNU/Linux 11 (bullseye) (x86_64)
 架构              : x86_64 (64 Bit)
 内核              : 6.2.2-x64v2-xanmod1
 TCP加速方式       : bbr
 虚拟化架构        : KVM
 NAT类型           : Full Cone
 IPV4 ASN          : AS25820 IT7 Networks Inc
 IPV4 位置         : Los Angeles / California / US
----------------------CPU测试--通过sysbench测试-------------------------
 -> CPU 测试中 (Fast Mode, 1-Pass @ 5sec)
 1 线程测试(单核)得分: 		1625 Scores
---------------------内存测试--感谢lemonbench开源-----------------------
 -> 内存测试 Test (Fast Mode, 1-Pass @ 5sec)
 单线程读测试:		43429.47 MB/s
 单线程写测试:		19105.92 MB/s
------------------磁盘dd读写测试--感谢lemonbench开源--------------------
 -> 磁盘IO测试中 (4K Block/1M Block, Direct Mode)
 测试操作		写速度					读速度
 100MB-4K Block		23.0 MB/s (5625 IOPS, 4.55s)		26.9 MB/s (6563 IOPS, 3.90s)
 1GB-1M Block		898 MB/s (857 IOPS, 1.17s)		2.4 GB/s (2254 IOPS, 0.44s)
---------------------磁盘fio读写测试--感谢yabs开源----------------------
Block Size | 4k            (IOPS) | 64k           (IOPS)
  ------   | ---            ----  | ----           ---- 
Read       | 159.34 MB/s  (39.8k) | 315.00 MB/s   (4.9k)
Write      | 159.76 MB/s  (39.9k) | 316.66 MB/s   (4.9k)
Total      | 319.10 MB/s  (79.7k) | 631.67 MB/s   (9.8k)
           |                      |                     
Block Size | 512k          (IOPS) | 1m            (IOPS)
  ------   | ---            ----  | ----           ---- 
Read       | 783.91 MB/s   (1.5k) | 833.15 MB/s    (813)
Write      | 825.56 MB/s   (1.6k) | 888.64 MB/s    (867)
Total      | 1.60 GB/s     (3.1k) | 1.72 GB/s     (1.6k)
------------流媒体解锁--基于oneclickvirt/CommonMediaTests开源-----------
以下测试的解锁地区是准确的,但是不是完整解锁的判断可能有误,这方面仅作参考使用
----------------Netflix-----------------
[IPV4]
您的出口IP可以使用Netflix,但仅可看Netflix自制剧
NF所识别的IP地域信息:美国
[IPV6]
您的网络可能没有正常配置IPv6,或者没有IPv6网络接入
----------------Youtube-----------------
[IPV4]
连接方式: Youtube Video Server
视频缓存节点地域: 美国  洛杉机(LAX31S13)
[IPV6]
Youtube在您的出口IP所在的国家不提供服务
---------------DisneyPlus---------------
[IPV4]
当前IPv4出口所在地区即将开通DisneyPlus
[IPV6]
DisneyPlus在您的出口IP所在的国家不提供服务
解锁Netflix,Youtube,DisneyPlus上面和下面进行比较,不同之处自行判断
----------------流媒体解锁--感谢RegionRestrictionCheck开源--------------
 以下为IPV4网络测试,若无IPV4网络则无输出
============[ Multination ]============
 Dazn:					Failed (Error: )
 Disney+:				No (IP Banned By Disney+ 1)
 Netflix:				Originals Only
 YouTube Premium:			Yes (Region: US)
 Amazon Prime Video:			Yes (Region: US)
 TVBAnywhere+:				Yes
 Spotify Registration:			Yes (Region: US)
 OneTrust Region:			US [California]
 iQyi Oversea Region:			US
 Bing Region:				US (Risky)
 Apple Region:				US
 YouTube CDN:				Los Angeles, CA
 Netflix Preferred CDN:			Los Angeles, CA
 ChatGPT:				Yes
 Google Gemini:				Yes (Region: USA)
 Claude:				Yes
 Wikipedia Editability:			No
 Google Play Store:			United States 
 Google Search CAPTCHA Free:		Yes
 Steam Currency:			USD
 ---Forum---
 Reddit:				No
=======================================
 以下为IPV6网络测试,若无IPV6网络则无输出
---------------TikTok解锁--感谢lmc999的源脚本及fscarmen PR--------------
 Tiktok Region:		【US】
-------------IP质量检测--基于oneclickvirt/securityCheck使用-------------
数据仅作参考,不代表100%准确,如果和实际情况不一致请手动查询多个数据库比对
以下为各数据库编号,输出结果后将自带数据库来源对应的编号
ipinfo数据库  [0] | scamalytics数据库 [1] | virustotal数据库   [2] | abuseipdb数据库   [3] | ip2location数据库    [4]
ip-api数据库  [5] | ipwhois数据库     [6] | ipregistry数据库   [7] | ipdata数据库      [8] | db-ip数据库          [9]
ipapiis数据库 [A] | ipapicom数据库    [B] | bigdatacloud数据库 [C] | cheervision数据库 [D] | ipqualityscore数据库 [E]
IPV4:
安全得分:
声誉(越高越好): 0 [2] 
信任得分(越高越好): 0 [8]
VPN得分(越低越好): 100 [8] 
代理得分(越低越好): 100 [8] 
社区投票-无害: 0 [2] 
社区投票-恶意: 0 [2] 
威胁得分(越低越好): 100 [8] 
欺诈得分(越低越好): 0 [1] 65 [E]
滥用得分(越低越好): 0 [3] 
ASN滥用得分(越低越好): 0.0021 (Low) [A] 
公司滥用得分(越低越好): 0.0034 (Low) [A] 
威胁级别: low [9 B] 
黑名单记录统计:(有多少黑名单网站有记录):
无害记录数: 0 [2]  恶意记录数: 0 [2]  可疑记录数: 0 [2]  无记录数: 94 [2]  
安全信息:
使用类型: DataCenter/WebHosting/Transit [3] business [8] isp [A] hosting [0 7 9] unknown [C]
公司类型: hosting [0] business [7 A]
是否云提供商: Yes [7 D] 
是否数据中心: Yes [0 5 6 A] No [1 8 C]
是否移动设备: Yes [E] No [5 A C]
是否代理: Yes [5 E] No [0 1 4 6 7 8 9 A B C D]
是否VPN: Yes [6 7 A D E] No [0 1 C]
是否TorExit: No [1 7 D] 
是否Tor出口: No [1 7 D] 
是否网络爬虫: No [9 A B E] 
是否匿名: Yes [6 7 D] No [1 8]
是否攻击者: No [7 8 D]
是否滥用者: No [7 8 A C D E] 
是否威胁: No [7 8 C D] 
是否中继: No [0 7 8 C D] 
是否Bogon: No [7 8 A C D] 
是否机器人: No [E] 
DNS-黑名单: 313(Total_Check) 0(Clean) 6(Blacklisted) 163(Other) 
Google搜索可行性:NO
-------------邮件端口检测--基于oneclickvirt/portchecker开源-------------
Platform  SMTP  SMTPS POP3  POP3S IMAP  IMAPS
LocalPort ✔     ✔     ✔     ✔     ✔     ✔    
QQ        ✔     ✔     ✔     ✘     ✔     ✘    
163       ✔     ✔     ✔     ✘     ✔     ✘    
Sohu      ✔     ✔     ✔     ✘     ✔     ✘    
Yandex    ✔     ✔     ✔     ✘     ✔     ✘    
Gmail     ✔     ✔     ✘     ✘     ✘     ✘    
Outlook   ✔     ✘     ✔     ✘     ✔     ✘    
Office365 ✔     ✘     ✔     ✘     ✔     ✘    
Yahoo     ✔     ✔     ✘     ✘     ✘     ✘    
MailCOM   ✔     ✔     ✔     ✘     ✔     ✘    
MailRU    ✔     ✔     ✘     ✘     ✔     ✘    
AOL       ✔     ✔     ✘     ✘     ✘     ✘    
GMX       ✔     ✘     ✔     ✘     ✔     ✘    
Sina      ✔     ✔     ✔     ✘     ✔     ✘    
Apple     ✘     ✔     ✘     ✘     ✘     ✘    
FastMail  ✘     ✔     ✘     ✘     ✘     ✘    
ProtonMail✘     ✘     ✘     ✘     ✘     ✘    
MXRoute   ✔     ✘     ✔     ✘     ✔     ✘    
Namecrane ✔     ✔     ✔     ✘     ✔     ✘    
XYAMail   ✘     ✘     ✘     ✘     ✘     ✘    
ZohoMail  ✘     ✔     ✘     ✘     ✘     ✘    
Inbox_eu  ✔     ✔     ✔     ✘     ✘     ✘    
Free_fr   ✘     ✔     ✔     ✘     ✔     ✘    
----------------三网回程--基于oneclickvirt/backtrace开源----------------
北京电信 219.141.140.10  电信CN2GIA [精品线路] 
北京联通 202.106.195.68  电信CN2GIA [精品线路] 
北京移动 221.179.155.161 移动CMIN2  [精品线路] 
上海电信 202.96.209.133  电信CN2GIA [精品线路] 
上海联通 210.22.97.1     电信CN2GIA [精品线路] 联通4837   [普通线路] 
上海移动 211.136.112.200 移动CMIN2  [精品线路] 
广州电信 58.60.188.222   电信CN2GIA [精品线路] 
广州联通 210.21.196.6    电信CN2GIA [精品线路] 联通4837   [普通线路] 
广州移动 120.196.165.24  移动CMIN2  [精品线路] 
成都电信 61.139.2.69     电信CN2GIA [精品线路] 
成都联通 119.6.6.6       电信CN2GIA [精品线路] 联通4837   [普通线路] 
成都移动 211.137.96.205  移动CMIN2  [精品线路] 
准确线路自行查看详细路由,本测试结果仅作参考
同一目标地址多个线路时,可能检测已越过汇聚层,除了第一个线路外,后续信息可能无效
---------------------回程路由--感谢fscarmen开源及PR---------------------
依次测试电信/联通/移动经过的地区及线路,核心程序来自nexttrace,请知悉!
广州电信 58.60.188.222
18.75 ms 	AS25820 美国 加利福尼亚 洛杉矶 it7.net
0.64 ms 	AS25820 美国 加利福尼亚州 洛杉矶 it7.net
146.75 ms 	* [CN2-BackBone] 中国 广东 广州 chinatelecom.cn 电信
153.13 ms 	* [CN2-BackBone] 中国 广东 广州 chinatelecom.cn 电信
161.76 ms 	* [CN2-BackBone] 中国 广东 广州 chinatelecom.cn 电信
155.81 ms 	AS4134 中国 广东 佛山市 www.chinatelecom.com.cn 电信
157.89 ms 	AS4134 中国 广东 深圳 福田区 www.chinatelecom.com.cn 电信
广州联通 210.21.196.6
35.11 ms 	AS25820 美国 加利福尼亚 洛杉矶 it7.net
0.52 ms 	AS25820 美国 加利福尼亚州 洛杉矶 it7.net
151.56 ms 	* [CN2-Global] 中国 香港 chinatelecom.cn 电信
177.41 ms 	AS4837 [CU169-BACKBONE] 中国 广东 广州 chinaunicom.cn 联通
196.54 ms 	AS17816 [UNICOM-GD] 中国 广东 深圳 chinaunicom.cn 联通
207.34 ms 	AS17623 [APNIC-AP] 中国 广东 深圳 chinaunicom.cn 联通
197.65 ms 	AS17623 中国 广东 深圳 宝安区 chinaunicom.cn 联通
广州移动 120.196.165.24
39.03 ms 	AS25820 美国 加利福尼亚 洛杉矶 it7.net
0.61 ms 	AS25820 美国 加利福尼亚州 洛杉矶 it7.net
126.57 ms 	AS58807 [CMIN2-NET] 美国 加利福尼亚 洛杉矶 cmi.chinamobile.com 移动
126.39 ms 	AS58807 [CMIN2-NET] 中国 上海 cmi.chinamobile.com 移动
127.64 ms 	AS9808 [CMNET] 中国 上海 chinamobileltd.com 移动
136.42 ms 	AS9808 [CMNET] 中国 上海 chinamobileltd.com 移动
128.94 ms 	AS9808 [CMNET] 中国 上海 chinamobileltd.com
152.49 ms 	AS9808 [CMNET] 中国 北京 chinamobileltd.com 移动
153.19 ms 	AS9808 [CMNET] 中国 北京 chinamobileltd.com 移动
159.13 ms 	AS9808 [CMNET] 中国 北京 chinamobileltd.com 移动
154.25 ms 	AS56040 [APNIC-AP] 中国 广东 深圳 gd.10086.cn 移动
--------------------自动更新测速节点列表--本脚本原创--------------------
位置		 上传速度	 下载速度	 延迟	  丢包率
Speedtest.net	 8165.52 Mbps	 7198.47 Mbps	 0.36	  0.0%
洛杉矶		 8095.22 Mbps	 5766.83 Mbps	 0.85	  0.0%
联通成都	 1934.83 Mbps	 6.22 Mbps	 207.20	  NULL
电信Zhenjiang5G	 689.86 Mbps	 4195.97 Mbps	 137.22	  NULL
电信Suzhou5G	 1423.88 Mbps	 3977.17 Mbps	 136.99	  NULL
------------------------------------------------------------------------
 总共花费      : 5 分 8 秒
 时间          : Fri Mar 21 19:58:00 CST 2025
------------------------------------------------------------------------
阅读全文

安利一下个人维护的Nonebot QQ机器人项目

Bot 2025/2/25

首先放上项目的开源链接 https://github.com/LambdaYH/MigangBot

这个项目基于Nonebot2开发,目前已经维护了2年多的时间,并且运行比较稳定,缝合了许多功能功能也比较多
许多的开发思路都来源于zhenxunbot

贴一张目前具有的功能的图

还有一些功能被隐藏了起来,比如通过转发消息实现Nonebot端对接獭獭机器人,从而处理一些QQ指令。

目前项目推荐使用docker方式部署。

欢迎大家多多提PR

247244d098c861a72aedb206ae1f40cf_720.jpg

阅读全文

Nginx中location与proxy_pass是否携带斜杠的分析

Nginx 2025/2/25

本文主要探讨一下使用Nginx进行反代时,location中的location以及proxy_pass带斜杠的分析。

四种情况

location结尾不带斜杠,proxy_pass结尾不带斜杠

location /test-locaion-and-p {
    proxy_pass http://127.0.0.1:5000;
}

请求/test-locaion-and-p被转发到http://127.0.0.1:5000/test-locaion-and-p
请求/test-locaion-and-p/sub被转发到http://127.0.0.1:5000/test-locaion-and-p/sub

location结尾带斜杠,proxy_pass结尾不带斜杠

location /test-p/ {
    proxy_pass http://127.0.0.1:5000;
}

请求/test-p/被转发到http://127.0.0.1:5000/test-p/
请求/test-p/sub被转发到http://127.0.0.1:5000/test-p/sub

location结尾不带斜杠,proxy_pass结尾带斜杠

location /test-location {
    proxy_pass http://127.0.0.1:5000/;
}

请求/test-location被转发到http://127.0.0.1:5000/
请求/test-location/sub被转发到http://127.0.0.1:5000//sub

location结尾带斜杠,proxy_pass结尾带斜杠

location /test/ {
    proxy_pass http://127.0.0.1:5000/;
}

请求/test被转发到http://127.0.0.1:5000/
请求/test/sub被转发到http://127.0.0.1:5000/sub

总结

由以上的结果能够看到

location后是否带斜杠影响不大,而proxy_pass的url后面是否带/将影响反代到的实际路径。

阅读全文

Mybatis参数中传递实体时,加不加@Param的区别

Java 2025/2/16

假设有个实体对象:

@Data
public class AObj {
    private String prop;
}

然后将这个实体对象作为实体供MyBatis调用
当以如下方式调用时

@Mapper
public interface ATestMapper {
    void doSth(@Param("param") AObj obj);
}

在xml中就必须以#{param.prop}的方式获取参数了。

但是如果修改写法,去掉@Param

@Mapper
public interface ATestMapper {
    void doSth(AObj obj);
}

就能够在xml中直接使用#{prop}

阅读全文

记一次Comparison method violates its general contract

Java 2025/1/23

今天维护的系统中出现了Comparison method violates its general contract报错,导致业务异常。经过这篇文章的解决方案,才知道sort后collect时,由于sort时候没有对相等的情况判断,只返回了1或-1,导致了这个问题。

阅读全文
avatar
默白

这里是默白的一些碎碎念