2025年11月归档

https://wuliao.de/blog/
现在新域名是这个了,读下来就是,无聊的博客。 我够无聊吧。

本来简单处理就是 blog.wuliao.de 这样替换一下域名就好,不过,想想还是 wuliao.de/blog 这样更符合自然语序。谁叫我挺无聊挺有空呢。
折腾了一晚,踩的坑我改天专门写篇文章来说一下,因为typecho的设计上是只能放在根目录的,现在变二级目录了。

顺便把缓存功能取消了,还在考虑要不要把AI垃圾评论也取消,因为我想把源代码回归主线,将来只在主题模块做改动,而前面两个功能修改了主程序。

缓存功能取消问题不大,主要是防止CC攻击的,不过自从我全站缓存后已经没人来CC我试水了,而且就算CC死了其实也不是大事。不过垃圾评论挺严重的,现在有AI也都时不时来几条,以前没有的时候一天几百条都玩过。这个得想想怎么弄。

今天一位nodeseek的朋友向我指出,博客显示了29页,但点击29页时会报告找不到,实际只有28页。很感谢他的细心和报告,我自己都没注意到。
经过检查,typecho是在var/Widget/Archive.php的2233行的地方获得文章总条数: (也可能是在前面,不重要,反正是这个sql)
$this->countSql = clone $select;
经debug, countSql的判断条件是文章状态是 publish和private,非常奇怪,为什么会把private也加进去呢,但在实际显示文章的时候,就又不包含private的了?这样就导致显示有29页,实际只有28页。(因为博客里有几篇private的文章)。
一个可能的原因是,大概出发点是想让用户看到自己发布的private的文章(在下面判断了是否hasLogin),不过做到一半,开发者忘了list也需要private了吧。
因为typecho太久不更新了,我也懒得去深究也懒得提issue,就自己默默的改了吧。
要朔源比较麻烦,怕引出来别的问题,就简单补丁一下,就加一行:

        /** 仅输出文章 */
        $this->countSql = clone $select;

        $this->countSql->where('table.contents.status = ?', 'publish');   //加这行,只允许publish

cloudflare全球大崩盘大家都知道了,结果就是这么个简单原因,发现一个数据库返回值不对,程序自己给panic掉了。。
这在任何一个公司都不允许的事情居然在cloudflare这种公司发生了。
rust很安全?一个屌毛开发就可以让它原地爆炸,话说,cloudflare审核代码、代码评议难道也不存在吗?
太草台了,甚至草台过我。

cf.png

很多年前,那个时候我刚才开始用unix系,当时用freebsd。

freebsd的理念是,安全!网络安全,数据安全!一切都要安全。只是不能忍受的是,硬盘太慢了,稍微负荷重一点系统就卡在io上响应非常缓慢,更严重的是,io引起恶性循环最终服务器宕机,被迫断电重启后那强制fsck动不动需要执行几天,而且还不能够中断!安全,都是为了安全,因为freebsd使用了同步io,就是所有数据都是实时同步刷新到硬盘。

后来有一天,我用了freebsd批判的很不安全的linux,突然发现,天啊,我的服务器尽然可以这么快!同样负荷下系统竟然如此的流畅!

一下顿悟了,与其动不动卡死及长时间停机,我还不如冒点风险,接受这“不安全”的异步io。服务器硬件原因宕机其实是小概率事件,为了防止小概率事件而选择另一个大概率/必然的恶性事件,不值得! 现在freebsd已经可以认为是事实上早已死亡,而linux生机勃勃,用户的选择就说明了一切。

今天想到这个问题是因为我在习惯性的为服务器设置raid1,然后突然想到,我为什么要设raid1而不是0呢?

数据我都是实时异地备份的,硬盘可能一年都不会挂一次,为了这低概率事件,我要忍受硬盘速度慢一半空间少一半,这不和freebsd那情况一样吗?我又顿悟了。

众所周知,OVH在后台管理面板中显示/128,但其实是提供的/64。不过,OVH默认仅将 ::1 路由到了网口,这就是/128的缘由。
用NDPPD是解决之道,原理什么就不扯了,直接贴命令步骤吧。 本文由GPT友情提供技术支持,我自己亲身实测在Debian13上完全好用。以前的一些方法长时间空闲时会中断路由或者空闲后需要好几秒才能恢复完成第一次连接的问题,用本方法都不存在。

apt update
apt install ndppd -y

cat <<EOF >/etc/sysctl.d/99-ipv6-proxy.conf
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.default.forwarding=1
net.ipv6.conf.all.proxy_ndp=1
net.ipv6.conf.default.proxy_ndp=1
EOF

sysctl --system

cat >/etc/ndppd.conf <<'EOF'
route-ttl 30000
proxy eno1 {      #注意改成你的外网网卡
    router yes
    ttl 30000
    rule 你的ipv6::/64 {      #比如面板的是 A:B:C:D::1/128,这里就填 A:B:C:D::/64
        static
    }
}
EOF

systemctl enable --now ndppd
systemctl restart ndppd
cat << 'EOF' > /usr/local/bin/ipv6-keepalive.sh
#!/bin/sh
while true; do
    ip -6 neigh show >/dev/null 2>&1
    sleep 60
done
EOF

chmod +x /usr/local/bin/ipv6-keepalive.sh
cat << 'EOF' > /etc/systemd/system/ipv6-keepalive.service
[Unit]
Description=IPv6 NDP Keepalive
After=network.target

[Service]
ExecStart=/usr/local/bin/ipv6-keepalive.sh
Restart=always

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable --now ipv6-keepalive.service

搞定。现在,你可以在主机中,或者在虚拟机中任意分配/64子网地址,NDPPD就会将其自动宣告出去。
这个博客现在就是Cloudflare通过IPV6回源。好处是啥?这样直接可以回源到虚拟机80/443上,因为是个独立的IP,而如果通过V4则需要在主机上做额外的7层转发。