MoreRSS

site iconAllen Hua修改

Java工程师,常驻南京。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

Allen Hua的 RSS 预览

给图床部署cdn腾讯云的edgeone并排查Cache-Control max-age 3600的问题

2025-08-19 11:13:00

正篇

最近发布了徒步反穿武功山,以及自驾皖浙赣的游记文章,点我直达 ,我分享到了 v2ex 以及 linux.do ,各路网友都说图床太慢了。由于原文图片数量的确较多,我的图床部署在家里,然后只有 VPS 的6Mbps小水管,在并发不大的时候阅读文章还行(图片加载的速度还OK,并且有配置懒加载,所以体验还行),但是昨天发了帖子之后有几波流量激增。于是我寻找办法:

  • 准备使用活菩萨 cloudflare,但是要整体迁移域名解析到 cf,因为我这个域名有经过备案,并且数量众多,而且还要兼顾国内访问速率,我就放弃了 cloudflare 方案
  • 准备在源图床那边创建新的存储策略,当前是存储在本地磁盘的,然后想想又要买对象存储,又放弃
  • 最后发现了腾讯云的 edgeone,开通试试一个月只要4.8元,实付款4.7,最近微信支付很多借记卡、信用卡减免活动

最终我买了一个月的 edgeone,只花费4.7元~

现在部署好了 cdn,访问速度大大增加。当前时间点 2025-08-19 10:30:42 edgeone 流量情况
edgeone流量情况.webp

我这篇文章不算是教程吧,只能是个人的心路历程,我也不想写保姆级教程,太费事了。在此就简单讲讲过程和原理。

  1. 首先购买了一个月的 edgeone 产品,需要绑定站点,首先绑定根域名,也就是 940304.xyz 然后经过认证
  2. 域名认证方式是:添加 TXT 类型记录,主机记录和对应的值都是 edgeone 给出的,我的域名托管在 dnspod,需要在 dnspod 那边改
  3. 也可以不认证根域名,每个二级域名都分别认证
  4. 通过CNAME 方式接入 CDN,需要先停止解析或删除之前的 image 主机名的 A记录(DNS A记录),然后添加 image 主机名的 CNAME 记录(因为同一个主机名A记录和 CNAME记录只能有一个条)
  5. 创建成功后就等待 edgeone 下发 cdn 配置,等待部署生效即可

我顺利的部署成功,也看到 edgeone 流量页面产生了非常多的数据,当前我博客中的多图文章访问体验肯定就好很多了。

但是后面我发现一个问题,就是图片资源访问后返回头当中的 Cache-Control 始终是 max-age=3600,这说明 cdn 边缘节点只会缓存这张图片一个小时,如果用户在一个小时之后访问同链接会无法击中缓存,导致cdn节点回源获取原始文件,这势必会增加很多源站的流量,我的公网VPS以及家里服务器的流量都会增大,设置CDN的效果就大为下降了,而且我这就是图床程序,资源是静态的,不需要长时间变动。一般情况下图片资源都会设置30天后过期,也就是 max-age=2592000(单位s),于是我开启了排查。

在部署 edgeone 之前,我的图床架构是这样的
图床旧的网络架构.webp

在部署 edgeone 之后,我的图床架构变成这样
部署了cdn后的图床架构.webp

在任意有网络机器执行 curl -I https://image.940304.xyz/i/2025/05/21/682dd7d3137c3.jpg 发现返回 Cache-Control: max-age=3600,我开启了漫长的排查,总结下来就是

1、在VPS上修改 nginx 配置,显式增加 Cache-Control 的返回头,设置成 public, max-age=2592000,但是无果
2、在以上基础上,区分单独的匹配图片的 location,因为之前是一个反向代理 location / 就能搞定

配置是这样的

location ~* \.(jpg|jpeg|png|gif|webp|ico|css|js|svg|woff2)$ {
                proxy_pass http://127.0.0.1:81;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Host $server_name;
                proxy_set_header X-Forwarded-Proto https;
                proxy_set_header Host $host;

                # 30天缓存(仅对静态资源)
                add_header Cache-Control "public, max-age=2592000, s-maxage=2592000";

                # 跨域允许设置,允许所有跨域
                add_header 'Access-Control-Allow-Origin' *;
                # 自定义 Debug 头部(仅用于测试)
                add_header HDKRESP "This-request-matched-jpg-location_test"; # 新增
                # 跨域允许设置结束
                # 防盗链设置,因为上述跨域是允许所有的,这里就要设置防盗链从而进行域名的白名单设置
                valid_referers none blocked 940304.xyz *.940304.xyz hellodk.cn *.hellodk.cn hellodk.com *.hellodk.com 10.10.10.5;

                #nginx不允许嵌套if语句,这个很关键,否则nginx -t 会测试失败,无法reload或者start nginx服务

                set $block_access 0;

                # 如果 referer 无效
                if ($invalid_referer) {
                        set $block_access 1;
                }

                # 根据之前的判断结果决定是否拦截
                if ($block_access) {
                        rewrite ^/ https://i.imgur.com/CB4Fseq.jpeg;
                }
        }

这样的确能增加Cache-Control 的返回头,但是edgeone 那边始终没有生效。我还去lsky pro 图床程序的源 apache2 服务端添加了 Cache-Control 头,因为根据 edgeone 的规则,会先读源站的缓存相关的返回头(Cache-Control:s-maxage, Cache-Control:max-age, Expires),如果有会优先遵循源站的配置

edgeone 的文档:https://cloud.tencent.com/document/product/1552/87651

edgeone默认缓存规则
edgeone默认缓存规则.webp

默认缓存规则文字说明
默认缓存规则文字说明.webp

3、发现修改vps nginx配置无果,我进入了 lsky pro 容器,做了以下操作

# Apache 需要启用 mod_headers 才能使用 Header set 指令,启用这个模块
a2enmod headers

# 修改生效配置文件 `/etc/apache2/sites-enabled/000-default.conf` 可以通过命令 `apache2ctl -S` 寻找生效的虚拟主机所在文件
# 并增加如下配置
<LocationMatch "^/i/.*\.(jpg|jpeg|png|gif|webp|ico|bmp)$">
    Header set Cache-Control "public, max-age=2592000"
</LocationMatch>

# 重启apache2服务
service apache2 restart

现在图床源站点会给静态图片资源返回 Cache-Control 了,在图床容器中执行 curl -I http://localhost/i/2025/05/21/682dd7d3137c3.jpg 有如下返回

HTTP/1.1 200 OK
Date: Tue, 19 Aug 2025 03:11:18 GMT
Server: Apache/2.4.53 (Debian)
Last-Modified: Wed, 21 May 2025 13:40:35 GMT
ETag: "ef67-635a58279843c"
Accept-Ranges: bytes
Content-Length: 61287
Cache-Control: public, max-age=2592000
Content-Type: image/jpeg

在 edgeone 管理页面清除了这个URL https://image.940304.xyz/i/2025/05/21/682dd7d3137c3.jpg 的缓存,从 EO-Cache-Status MISS 到 HIT(也就是第一次请求未击中缓存cdn节点回源了,到第二次击中了缓存),返回的 max-age 仍然是 3600

4、开始排查 edgeone 这边,终于找到了原因所在!

需要在这里点击站点加速,我以为默认的全局配置就是对的,因为设置的是遵循源站的 Cache-Control,所以一直没细看
点击站点加速.webp

这里全局配置是正确的,没毛病,但是右侧还有一个规则引擎默认是打开的(但是默认没有任何配置,尼玛坑死我),并且优先级更高。
全局配置和规则引擎.webp

规则引擎默认打开并且默认无配置坑我导致max-age一直是3600!!!(欲哭无泪
规则引擎默认打开并且默认无配置坑我导致max-age一直是3600.webp

最后我因为不需要个性的规则引擎配置,我就将这边关掉了,直接使用全局配置,遵循源站的 Cache-Control 即可。

最终执行 curl -I https://image.940304.xyz/i/2025/05/21/682dd7d3137c3.jpg 返回了 Cache-Control: public, max-age=2592000 最终解决,这样可以减少 cdn 回源的频率,需求满足!

ok,如果你有任何疑问,欢迎留言与我讨论。

番外篇

edgeone国际版测速分享到X或者Facebook得FreePlan,网站 https://edgeone.ai 甚至分享到X+分享到Facebook可得两份FreePlan
edgeone国际版测速分享到X或者Facebook得FreePlan.webp

我等当前买的国内版失效之前的几天就切换到国际版。但是需要注意的是,腾讯云的一份身份认证只能实名制一个腾讯云账号,edgeone国际版要想使用中国大陆节点需要实名认证的账号才行。我的身份已经实名了国内版的了,后面大概就选择国际节点

国内版edgeone产品,4.7元买的一个月
国内版edgeone产品4.7元买的一个月.webp

从高山草甸到徽派古村:武功山反穿与皖浙赣自驾行记

2025-08-16 23:45:00

前排提示:本文存在大量图片和少量视频,但均已压缩,请放心阅读 ^_^

前言

最近几年的8月旅行我都写了游记,在此给个超链接

时间又到了2025年8月,换我来享受一把假期,2号到10号,一共9天。

2025年8月假期时间日历.webp

做攻略的时候看了很多,但最后都无法下定决心,这几天刚好非常热,想去高海拔地区避暑,同时不想报团游,最终还是觉得自驾游更有体验感。在bilibili看到这个视频,觉得很不错,这个博主分享的自驾线路以及推荐的地域非常客观合理。【8月全国自驾大盘点】 https://www.bilibili.com/video/BV1WTuzzWEZP/

原本打算去玩个伊犁小环线,也打算去贵州西部来个小环线,还打算去云南西北部,走走国道G219,去年去过川西小环线,今年因为各种原因最后放弃了远行。后面就决定环江浙皖赣了,😄 皖浙赣也有一部分地区海拔1000+,晚上甚至可以露营。最后和我哥一拍即合,旅行走起。

本次旅行只进行了7个完整天,和我们的预期相符,花费也没有很多。先看看旅行路书总览图。

旅行路线图高德路书总览图.webp

Day 1 - 8月2号

收拾好行李箱带上防潮垫、睡袋和登山杖,坐高铁去合肥。

收拾好行李箱和防潮垫睡袋登山杖.webp

收拾到下午3 4 点,我们才从合肥出发,一开始打算直接到萍乡,但是出发晚了,最后决定夜宿南昌,刚好都没有去过南昌,听说南昌的夜景也不错。

第一天从合肥出发,前往今晚的目的地南昌.webp

在路上的感觉真好,我喜欢这种轻松的自驾游

由于是从合肥到南昌,高速上会经过我们的老家潜山市,还在【王河服务区】停车休息了。看到这个服务区的一些设施,就感觉非常的local,很潜山。比如:

  1. 有一排水龙头的洗漱池,我们以前高中也是这样的,貌似潜山很多公共场所都有这样的设计
  2. 公共厕所,开水房,都有地方印记

晚上9点多到达南昌,看到八一广场摩肩接踵的人们惊呆了,昨天就是建军节,今晚继续热闹是吧。

HDK07130-dk-compressed.webp
HDK07134_vertical-dk-compressed.webp
HDK07136-dk-compressed.webp
HDK07141-dk-compressed.webp

找好了酒店,今晚就好好休息,明天再来逛逛南昌城。刚好明天是周日,不宜直接去武功山人挤人,挑个工作日再去正合适。

Day 2 - 8月3号

来了南昌必须要吃一吃江西美食。这个带辣椒的烤肠太香了,居然只要4块钱,也在洪都大拇指喝了奶茶,感觉也不错,比茶颜悦色便宜,个人感觉也更好喝。

洪都大拇指烤肠.webp

打卡地点:万寿宫,大士院,滕王阁,八一广场,八一大桥。分享一些照片

万寿宫附近的巷子1 万寿宫附近的巷子2
万寿宫附近的巷子3 以前我都不知道打平伙是什么意思,直到来到江西,以及看了小宋野钓的视频才知道

超地道的南昌炒粉!
HDK07180-dk-compressed.webp

这个拌面也很不错
HDK07182-dk-compressed.webp

苏超火起来之后,赣超,粤超也都搞起来了。赣超的热度还是不错的,比粤超强。
HDK07205-dk-compressed.webp

在八一大桥边
HDK07221_vertical-dk-compressed.webp
HDK07222-dk-compressed.webp

HDK07223-dk-compressed.webp
HDK07238-dk-compressed.webp

为了滕王阁这个机位走了好久,热的一批当时,但是效果并不是很满意,被小某书骗了。
HDK07242-dk-compressed.webp

晚上爬楼拍到了这张【滕王阁】绝景,有时候坚持等待会有收获。
HDK07273-dk-compressed.webp

但因为爬楼拍照和等待赣江对岸的建筑亮灯,就7点半之后才能出发前往萍乡了,今晚定了那边的民宿,明天将要徒步反穿武功山。这将对我是一个挑战。只是又要开夜车了...

夜里凌晨0点才到民宿,事先打电话让民宿老板将房卡放在桌上,写个我名字的纸条,在此感谢民宿老板,我们顺利到达也顺利入住,洗去风尘就入睡了。

Day 3 - 8月4号

我们昨晚将车辆停在反穿的终点,也就是定的这家民宿家。今早打车去龙王山。重装徒步,我们还带了帐篷和睡袋,打算今晚在武发客栈附近露营一晚上,目标地海拔1600,夜里应该很凉快。

武功山-发云界枫林山庄登山口
武功山-发云界枫林山庄登山口.webp

整装待发,踌躇满志(指出发时,小小的我不知道后面的艰辛万苦)
在龙王山起点准备出发.webp

徒步一开始遇到的妹子们也是重装,厉害厉害
徒步一开始遇到的妹子们也是重装徒步.jpg

一家三口的重装,小孩哥也太强了吧😂
一家三口的重装徒步小孩哥太强了吧.jpg

有一说一,爬到这个第一站的难度好大,我爬到这里时已累成狗,加上低血糖,有点体力不支。简直地狱般开局
反穿武功山第一站.webp

后面很多个补给站都没有拍,因为身上都湿透了,加上半山腰有很多带水汽的云团,手机摄像头都雾蒙蒙的。我在后面的两个补给点斥巨资买了三瓶原味有糖的可口可乐,500ML的,在第一家老爷爷那买了两瓶(我担心后面价格会更高😂),15块一瓶。第二家是个小哥哥营业,13块一瓶还让我上了个厕所(不然两块钱一次)。

用沾满水雾的手机拍了这张照片
用沾满水雾的手机拍了这张照片.webp

爬了两个多小时,感觉身体渐渐适应并且有力气了起来,而且也遇到了一些平缓的山路,不像一开始的一段路海拔爬升太多了。

爬过最抖的两个多小时路段,来到一片平地,此时云雾缭绕,我们身处云团间,伸手见不到太远,湿度爆表。
HDK07290-dk-compressed.webp

全国统一的我在xxx很想你
全国统一的我在xxx很想你.webp

到了中午,我们补充了能量,顺便也给身上的背包减轻负重。然后我找到一个补给点,点了一份蛋炒饭,居然只要20元,天地良心啊,吃完蛋炒饭我能量满满,还直接铺上蛋巢防潮垫在老板家地上简单午休了会。休息完继续出发,迎接我的是喜人的美丽风景!
HDK07310-dk-compressed.webp

下面这几张照片是拿出相机拍的了。不过此行相机拿出来的不多,实在是太累了,搞不动。
HDK07321-dk-compressed.webp
HDK07330-dk-compressed.webp
HDK07332-dk-compressed.webp
HDK07340-dk-compressed.webp

第一次爬到海拔1500左右的地方,遇到了风雨,我们赶紧将携带的雨衣穿上。

徒步反穿武功山遇到短时雷阵雨

随后就是翻越一座一座的山,常言道望山跑死马,这对于渺小的人类来说一样,没想到这片山体能绵延不断如此之长。在绝望坡前我是真的蛮绝望的
在绝望坡前我是真的蛮绝望的.jpg

攀爬绝望坡上的大石头路段,前面的岩石路段没有拍
爬上绝望坡遇到的一段平缓路

绝望坡岩石攀爬
绝望坡岩石攀爬.jpg

随后找到了露营地,天也渐黑,我们就露营扎寨了。今天的里程只有13公里但是海拔总爬升有1700米
里程13公里海拔爬升1700米.jpg

天黑了深山里仍然有不断的徒步人,我没想到的是,这状态一直持续到第二天早上,也就是说夜里0点有人深夜爬山,夜里2点还有人深夜爬山,夜里3点都有小队伍从我们的帐篷前走过,还讨论着夜空的星星,以及吊马桩(也有可能是草甸星空)那边的灯火通明。

Day 4 - 8月5号

第二天起床后的风景,今天早起看到了一般的日出
第二天起床后的风景.webp

收拾好之后我们便出发。今天遇到蛮多同行玻璃栈道的人,大家都是反穿徒步的勇士,我们在金顶下的广场分别。他们登顶去了,而我,因为“烧裆”实在难受就坐中庵索道下山了

从玻璃栈道上回望,这里已经是景区路段,设施很不错,风景也很好,海拔相对高度达到了1000米左右
从玻璃栈道上回望.webp

从前往金顶的广场下撤到中庵索道站还要走一个多小时,尽管是全程下山。看到很多挑物资上山的挑山工,是真的强也真的辛苦。
挑山工1.webp

挑山工2.webp

坐索道排队良久,下山后打车良久,才等到一个本地司机,经过他口中才知道当地村民设置了多个栏杆,阻止非官方车辆进出,只允许景区大巴和当地村民车辆通行,(可恶啊,但是赚钱)

下午在村子里吃到了一顿美美的饭,江西菜似乎毫不吝啬添加辣椒,或者泡椒之类的~ 出发前往景德镇市。

Day 5 - 8月6号

在景德镇留下的最深印象有几个:

  • 当地的交通简直一笔掉草,骑电瓶车的都很无敌,随随便便占用最左侧的机动车道,在景德镇开车得慢点注意别撞了行人和骑电瓶车的
  • 吃到了更便宜且更好吃的南昌拌面,4块钱一份早餐吃得饱饱的
  • 游玩景德镇最好的方式是租一辆电瓶车,本着打不过就加入的心态我也租了,一天30元,能跑30+公里
  • 除非提前一周就预约否则需要排队N个小时才能进的景德镇中国陶瓷博物馆,我也去了,感觉排的队是值的

网络流量让这个无语佛(无语菩萨?无语披萨,哈哈哈)爆火,它建于民国年间,正式名称是沉思罗汉。为了看它还得单独排个长长长长的队伍
因为流量爆火的无语佛.webp

很可爱很好看的陶瓷制品
很可爱很好看的陶瓷制品.webp

我买了这个杯子,手柄既可以用作手柄,也能当作吸管,摆在桌上很好看,杯子容积也刚好,喝水都赏心悦目
我买了这个杯子.webp

陶溪川文创街区没啥好玩的,东西贵,各种店有些脱离群众了。但是这张照片我还挺喜欢
陶溪川文创街区没啥好玩的但是这张照片我喜欢.webp

晚上吃好饭看到一个工人大叔在一个牛骨汤店点了一份普通的炒饭
晚上吃饭时看到一个工人大叔在一个牛骨汤店点了一份炒饭.webp
晚上吃饭时看到一个工人大叔在一个牛骨汤店点了一份炒饭2.webp

晚上吃饱喝足出发黄山祁门县,因为路线选取失误,还走到了“塌方治理,车辆绕行”路段,幸好绕行路段不长,路况也不是完全不能走,最终又是在0点左右到达酒店。
前方塌方治理车辆绕行.webp

Day 6 - 8月7号

在祁门县,又回到了我大安徽,小县城的面貌让我格外亲切,吃了一顿极其有性价比的早餐,还吃到了2块钱一份的炒面,以前初中上学的时候买早餐还能买3毛钱、7毛钱、1块钱的炒面。

没想到昨天预订的酒店就在华东蛇伤救治基地隔壁,而且昨晚前台引导我们停车也是停在了他们的院子里
华东蛇伤救治基地.jpg

祁门有两大特色,一是红茶,二是蛇伤救治基地。

祁门红茶 :世界三大高香红茶之一,色泽乌润,香气独特似花似蜜,被誉为"红茶皇后",祁门县核心产区所产尤为珍贵。

祁门蛇伤研究所 :中国首个专业蛇伤救治机构,创立于1965年,以中西医结合疗法闻名,救治毒蛇咬伤水平全国领先,兼具科研与医疗功能。

准备出发去祁门统坑玩水,但是发现轮胎又报故障,胎压又回落到1bar左右。去检查发现确实扎了胎,只好等待修复。

旅行就是这样说不好说不准,刚好巧合的是,昨晚的酒店隔壁也是补胎店 -_-
旅行就是这样说不好说不准补胎中.webp

补胎ing
补胎ing.webp

我们到了统坑这边村庄门口,风景绝美。这个村名字叫湘东村,这里是牯牛降景区腹地,但还没有到开发的景区附近
HDK07343-dk-compressed.webp

道路的尽头还有这样的人家,其实和我们安庆山区的农村很像
HDK07356-dk-compressed.webp

统坑这边的绝美玻璃水。因为这里交通不便,海拔地势高,周围全是大山,所以这里的山谷里流淌的山泉非常非常清澈干净
HDK07363-dk-compressed.webp

非常美的水潭子,但因为今天下雨,并且温度不高,都没有往上下游探索更多更美的水潭
HDK07357-dk-compressed.webp

遇到一位80岁老奶奶,她说这里非常好,一辈子没生过病。我看她还真的健谈,另外手脚和精神都很不错,我说给她拍张照片留恋,她还主动将手中的矿泉水和雨伞放在身后的三轮车上站好身姿配合我的拍摄
HDK07386_vertical-dk-compressed.webp

虽然下了雨,但我依然游泳了,不然带的装备都白带了,俗话说来都来了。并且露营了,吃饭了,还带了西瓜、鸭货、罐装可乐雪碧芬达。注意:户外游玩请一定带走随身垃圾!

然后还进行了小溪垂钓,钓到了非常多的石斑,这里环境的天然让我们惊呼,真的有这么好的水域!

出发前往浙江临安太子尖驿站。240公里左右,3个多小时即到。晚上到达太子尖驿站,这里海拔1350左右,没想到居然有这么多人露营
这里海拔1350左右没想到有这么多人露营.webp

今晚因为车辆就在帐篷旁边,可以换一个更大的帐篷了,相信可以睡得更好。

Day 7 - 8月8号

今天的行程就很简单,开车一路逛,看遍沿途风景。今天的大部分照片都是相机拍的,一起来欣赏沿途风景吧~

早上在太子尖驿站向下眺望
HDK07390-dk-compressed.webp

临安华光潭村
HDK07403-dk-compressed.webp
HDK07405-dk-compressed.webp

青山绿水,这里实际上我23年12月来过,当时就没有这么好看,毕竟当时是冬季
HDK07410-dk-compressed.webp

皖浙天路——安徽和浙江的交界处,牌坊修的不错呐
HDK07424-dk-compressed.webp
HDK07427-dk-compressed.webp

这一幕总让我想起深山禅院,黑神话悟空之类的概念,看起来就很幽深静谧,宁静美好
HDK07440-dk-compressed.webp

古韵悠扬,徽州古村落的经典标志,安徽省三级古树——枫杨
HDK07443-dk-compressed.webp

到达了皖浙天路的最高处——饭甑尖
HDK07445-dk-compressed.webp

这里的风景令我惊异,比起上次去的徽州天路,这里更加险峻,山体很像天柱山的花岗岩
HDK07446-dk-compressed.webp

今天烈日当下,但有蓝天白云,这些照片回头望真的很美,当时晒了点也无妨了
HDK07456-dk-compressed.webp

皖浙天路笔架峰
HDK07491-dk-compressed.webp

中午在绩溪县家朋乡炒了几个农家菜,吃得很满足。我们询问了周围游客和老板,哪里可以去游泳,哈哈,最终经过这个地方,梯田美景,美不胜收,不虚此行
HDK07493-dk-compressed.webp

对面的山,形似“山”字,形象至极
HDK07494-dk-compressed.webp

下午我们从宣城绩溪县驾车来到黄山徽州区西溪南古村落,听说今晚这里有鱼灯表演,没看过,自然很吸引我
HDK07499-dk-compressed.webp

古村落里也有很多人溯溪
HDK07500-dk-compressed.webp

一群嗷嗷待哺的小猫
HDK07501-dk-compressed.webp

古徽州的古村落,古村落房子里的细节,有大堂,有牌匾,有壁画,有圆桌,因为现代社会也有了空调,相得益彰
HDK07514-dk-compressed.webp

西溪南的游船,颇有皖南风味
HDK07525-dk-compressed.webp

夜幕降临,看到有人在售卖鱼灯了
HDK07530-dk-compressed.webp
HDK07533-dk-compressed.webp

表演开始,成群结队的一行人需要从起点走到终点,我第一次看到这样的文化,真的仿佛回到了从前,社会生产力低下,人们祈福风调雨顺,国泰民安的淳朴向往
HDK07555-dk-compressed.webp
HDK07558-dk-compressed.webp

此时还有舞蹈表演,围观的人群很多
HDK07575-dk-compressed.webp

终点处放起了烟花~ 居然如此浪漫,我赶紧调整了相机的模式,尽量用S挡多捕捉几张美丽的焰火
HDK07651_vertical-dk-compressed.webp

西溪南鱼灯表演焰火1 西溪南鱼灯表演焰火2
西溪南鱼灯表演焰火3 西溪南鱼灯表演焰火4
西溪南鱼灯表演焰火5 西溪南鱼灯表演焰火6

看完西溪南的鱼灯表演,我们准备回到南京了,这次旅行将要画上终点,累也是真的累,幸好我们有两个人轮流开车,可以间歇性休息。

结语

行笔至此,已经花了超过6个小时,回望这次旅行,没有去往远方,但就在皖浙赣,也有非常不错的风景和人文,最初的想法是去避暑,但我们也去了高海拔地区露营,完美实现了心中所念。如果你也有想法出门转转,记得实施你的方案,远方的公路,远方的山水,就在那里。

感谢阅读,有任何想要交流的,欢迎评论区留言。

增程器就是充电宝?别被忽悠了

2025-05-14 09:33:00

如果你畅游社交网络的汽车区,经常有人分享“增程车的增程器就是个充电宝”这样的观点,更有甚者,觉得“1.0L, 1.5L 1.5T 都可以做这个充电宝”。这些排量+是否有涡轮增压的发动机都可以做增程器是不假,但很影响用车体验,并且和车的设计以及定位密切相关,如果是一辆通勤代步小mini车,整车不到4米长,高速需求少,那么增程是非常理想的方案。但是我看大部分买了某 6 7 8 9,以及另一个某8 9 车型的人,是经常跑高速的,这种如果不讨论燃油经济性,也会造成他们的电池很快跑完“可用”循环,并且长时间大功率放电会加速这些电池的衰减。

我从一个点切入,你就知道 1.5T 增程器用在“百万豪车”为何不妥了。

当电池电量 30% 时,三元锂电池整包的放电功率大概只有满电时的60%~70%,如果此时用户正在从【泸定县城】爬往【折多山垭口】,这个例子太具体了,我们换成高速上紧急加速场景。某增程车?6(?代表一个字符)欣旺达三元锂电池包 36.8度,我查到他峰值是8C的放电倍率(几乎只能维持10+s),但是高负载(能扛住长时间大功率需求)时放电倍率只有3C,满电时放电能力有294.4kW,那么30% SOC 时候放电功率只有 110.4kW,无法满足此时的功率需求。

还有一个重要的点,也许很多人知道但是忽略了,电池包同一时间只能进行充电/放电,不可能既在放电又能充电的。

所以上面的场景下,很大可能是发动机+电池共同出力满足电机需求的。发动机 -> 发电机 -> 驱动电机,如果此部分功率不够,整车系统还会继续从电池中取功率喂给驱动电机。

这部分的能量传输路径是:发动机 - 发电机 - 交流电转直流电(AC to DC)- DCDC控制器 - 直流电转交流电(DC to AC)- 驱动电机 - 减速器/差速器 - 车轮。

能量转换图

发动机 → 发电机(AC) → 整流器(AC/DC) → 高压直流母线 → 逆变器(DC/AC)→ 驱动电机  
                                    ↓  
                                 DCDC(DC/DC)→ 12V系统  

所以增程车的增程器只是个充电宝吗?不是,某种意义上他也会参与“直驱”,但是他“直驱”的形式是通过曲轴带动发电机发的电驱动车轮前进。

我们在讨论直驱时,到底是在讨论什么?插混直驱就是发动机曲轴的力通过一些机构直接作用在车轮上,而不经过上面那一大串路径了。城区低速场景,功率需求比较低,大部分时间功率需求都在100kW以内,纯靠电池就能提供,这时候插混和增程是一样的,都是在合适的时间启动发动机专门发电,然后部分功率用于驱动,剩余功率充进电池。

浦口龙虎巷扫街,记录人间真实

2025-05-12 22:28:00

龙虎巷的高大梧桐树今年被政府砍断了,原本颇有老街风貌的街区瞬间失去了一些色彩,但这里依然还有很多魅力,昨天带上索尼 FE 35mm F1.8 去拍了几张照片,特此分享。

还遇到一个大爷,骑着电瓶车就来我跟前,“小伙子来摄影呀”,还颇健谈,和我讲以前浦镇的神话,甚至邀请我去他家喝酒…… hhhh

HDK06271-dk-compressed.webp
HDK06275_new-dk-compressed.webp
HDK06276_new-dk-compressed.webp
HDK06280-dk-compressed.webp
HDK06282-dk-compressed.webp
HDK06284-dk-compressed.webp
HDK06285_new-dk-compressed.webp
HDK06290-dk-compressed.webp
HDK06291-dk-compressed.webp
HDK06293_new-dk-compressed.webp
HDK06297-dk-compressed.webp
HDK06298-dk-compressed.webp
HDK06300-dk-compressed.webp
HDK06308-dk-compressed.webp
HDK06319-dk-compressed.webp
HDK06328-dk-compressed.webp
HDK06346-dk-compressed.webp
HDK06347-dk-compressed.webp
HDK06351-dk-compressed.webp
HDK06352-dk-compressed.webp

博客图片压缩方案更新|AVIF|WebP|MozJPEG|标准JPEG

2025-05-12 15:46:00

今天看B站动态当中的配图文件格式是 AVIF,瞬间起了兴趣。

然后才发现我的博客这么多图片我一直还在使用 MozJPEG 格式压缩的,虽然 MozJPEG 压缩率已经很高了,但看到更先进的算法不由得还是心动了,于是决定进行一些研究和寻求一些改变。

Squoosh 是 Google chrome labs 推出的,他支持压缩成 AVIF, MozJPEG, BrowserJPEG(就是标准JPEG), WebP 等格式,我一直用他压缩图片。他是开源的,源码在 https://github.com/GoogleChromeLabs/squoosh 支持这么多压缩算法

squoosh 压缩算法有哪些.webp

Squoosh各种压缩算法对比表

算法名称 核心技术 优势场景 劣势 兼容性
AVIF AV1视频编码 超高压缩率(50%+),支持HDR/广色域 编码速度慢,旧浏览器不支持 需现代浏览器
Browser JPEG 传统JPEG 快速压缩,广泛兼容 压缩率/画质均低于优化算法 全平台兼容
JPEG XL (beta) 新一代JPEG 渐进加载,兼容传统JPEG,超高画质保留 尚处beta阶段,生态未普及 实验性支持
MozJPEG 优化版JPEG 比传统JPEG节省20%-30%体积,兼容性好 无法突破JPEG格式限制 全平台兼容
WebP Google VP8 比JPEG小30%+,支持透明通道 部分旧设备不支持,不支持渐进加载 主流浏览器支持
WebP v2 (unstable) 升级版VP8 比WebP体积更小 不稳定,可能产生画质异常 实验性支持

(注:PNG相关算法未列入主推荐,因PNG格式不适合照片压缩)


我的目标是占用存储空间小(用户访问文章图片加载也会更快),画质能接受不能太差,所以最好的方案是 AVIF,但是兼容性差,图床支持也不行。

最佳选择是这样的 优先级排序:AVIF > WebP > MozJPEG

1️⃣ 首选:AVIF

  • 优势:在 Squoosh 实测中,AVIF 能以 1/3 原图体积(约70%压缩率)保持肉眼难以察觉的画质损失,支持更广色域。
  • 场景:适用于现代浏览器环境(Chrome 85+/Edge 89+),适合博客/电商等需要极致加载速度的网站。
  • 操作建议:压缩时设置 质量等级 65-75,开启 色域保留 选项。

2️⃣ 次选:WebP

  • 优势:体积比原JPEG减少 30-50%,兼容主流浏览器(Chrome/Firefox/Edge),支持透明度。
  • 场景:需要兼顾兼容性与压缩率的场景,如移动端APP、社交媒体图片。
  • 操作建议:设置 质量等级 75-85,勾选 自动滤镜优化

3️⃣ 保守选择:MozJPEG

  • 优势:完全兼容所有设备,通过智能量化表优化,比原JPEG节省 20-30% 体积。
  • 场景:必须保持.jpg格式的场景(如老CMS系统),或目标用户使用旧设备(IE/老旧安卓机)。
  • 操作建议:设置 质量等级 75-80,开启 渐进加载 提升感知速度。

下面实测我拍的一张南京长江大桥图片,分别使用 AVIF, MozJPEG, WebP 压缩,每种压缩算法均使用 Squoosh 默认压缩选项,来比比看吧

原图 jpg,大小 8.5MB

南京长江大桥原图8.5MB.webp

MozJPEG

mozjpeg压缩率.webp

WebP

webp压缩率.webp

AVIF

avif压缩率.webp

可以看出,MozJPEG -> WebP -> AVIF 压缩率逐步提升,文件体积不断减小,我看了一下画质均在可接受范围内,其中 WebP 我勾选了【Auto adjust filter strength 自动调整滤镜增强】(不会影响压缩率和文件体积,只会影响画质),一个表格来表达

算法名称 压缩率 压缩后文件体积
MozJPEG 88% 1.09MB
WebP 91% 812KB
AVIF 95% 419KB

从表格可以看出 AVIF 压缩率和新文件的文件体积都遥遥领先,这正是未来趋势。不过使用 AVIF 压缩时间很久,电脑风扇也会呼呼转,这也是代价。

我使用的图床是 Lsky Pro,不支持 avif,开源版本目前也不会迭代了,更不会增加新需求。综上,我今后将使用 WebP 作为图床图片的格式,虽然比 MozJPEG 也没有强多少,但是总归是要更好的。

Windows 电脑使用 Obs Studio 录制各个网站视频/桌面画面教程

2025-04-25 17:18:00

我分享这个 flow 是因为我有分享视频中片段的需求,但是又不想用相机拍摄,相机拍摄效果可能也不好。下载下来再裁剪又太麻烦。尤其是我喜欢看车祸警示录,有时候看到某些事故非常搞笑,我就用这个手段录制下来,视频可能就10s,30s,然后再微信分享,就很 nice 了。如果是分享10min的完整视频那种,就不如直接贴链接,或者直接下载下来再分享,不需要使用本文方案进行录制。

前言

你是否会因为难以下载 YouTube, X(Twitter), 小红书, Instagram, 微博 之类的网站上的视频而发愁呢……虽然下载这些网站的视频大多都有在线工具或者命令行工具,可以在 GitHub 寻找。

但是目前经过我的日常使用,小红书和微博上的视频资源不是很轻松就能下载下来,或者下载用时很久,还可能下载下来文件太大(比如下载时无法执行码率和分辨率),不利于再次分享。

我为了解决这个问题,一开始使用了 NVIDIA Geforce Experience,但是这个只能录制屏幕的完整内容,如果想要录制屏幕当中的某一块区域,英伟达这个软件就不行了。

于是转而使用 Obs Studio。下面这段介绍来自 DeepSeek V3

OBS Studio(Open Broadcaster Software)是一款免费开源的跨平台直播和录屏软件,广泛用于游戏直播、教学演示、视频创作等场景。以下是其核心特点:

1. 核心功能

  • 多场景切换:可创建多个场景(如游戏界面、摄像头画面、PPT等),直播时实时切换。
  • 来源组合:支持添加窗口捕获、摄像头、文字、图片、浏览器、音频等元素,自由布局。
  • 高性能录制:支持高帧率(60fps+)、高分辨率(4K)录制,输出为MP4、MKV等格式。
  • 直播推流:一键推流到Twitch、YouTube、B站等平台,支持RTMP协议。

2. 技术优势

  • 低延迟编码:内置x264、NVENC(NVIDIA显卡)、AMF(AMD显卡)等硬件加速编码器。
  • 音频控制:多轨道音频混合,支持降噪、增益等滤镜。
  • 插件扩展:通过插件支持虚拟摄像头、字幕、特效等扩展功能。

3. 适用场景

  • 游戏直播:捕获游戏画面+摄像头叠加,实时互动。
  • 网课/会议:录制屏幕+PPT演示,或虚拟摄像头接入Zoom/Teams。
  • 视频创作:录制教程、剪辑素材,支持后期音频分离编辑。

4. 跨平台支持

  • 支持Windows、macOS、Linux系统,界面简洁但需一定学习成本。

5. 注意事项

  • 硬件要求:高清直播需中高端CPU/显卡,建议提前测试性能。
  • 学习曲线:高级功能(如音频路由、动态滤镜)需查阅教程。

官网下载:OBS Project
社区活跃,遇到问题可通过论坛或GitHub快速解决。适合追求高自由度、零成本的用户。


我在使用 Windows 11 电脑。安装好 Obs Studio 之后,打开软件,进行初始化配置,我不直播,所以只进行了 recording 录制相关的初始化,最后 apply settings,应用设置。

添加源。我拿录制B站车祸警示录的视频举例,使用 edge 浏览器播放B站视频,那么来源选择【窗口采集】,选中正在运行的 edge 那个窗口,标题前缀是 [msedge.exe]

obs 添加源.jpg

如果不想录入当前电脑麦克风的声音,请将 Mic 给静音。

B站视频采集.jpg

此时会录制整个窗口的画面,如果想录制视频播放区域,需要添加一个裁剪/填充的【滤镜】,如下图,设置好距离左,顶部,右,底部的像素数量关闭即可。

obs 滤镜裁剪填充.jpg

在开始录制前确保输出的视频画面充满整个画布,勾选使用此源的尺寸作为输出分辨率 (重要重要!否则输出的视频可能有很多“留黑”空白区域)

使用次源的尺寸作为输出分辨率.jpg

最后再点击【开始录制】,同时播放 edge 浏览器窗口的视频,在视频结束时(或者你想截取的视频片段刚好结束)点击【停止录制】。

最终录制视频呈现的质量,设置项在 【设置】->【输出】->【录制】->【录像质量,录像格式,视频编码器,音频编码器,音轨】等配置。

建议录像格式使用MPEG-4,方便传播,比如微信就可以直接预览 mp4 视频。