ActivityPub在traefik下如何配置

分享
ActivityPub在traefik下如何配置
Photo by Yash Bindra / Unsplash

最近换Dokploy去部署我的Ghost网站,Dokploy默认使用traefik代理流量,如果是默认的Compose File,可以正常打开网站,但是ActivityPub却无法正常连接,就像之前在nginx反代的场景下,如果不修改nginx的代理文件,ActivityPub照样无法正常运行,如果你在使用nginx,那么可以参考我之前的文章。

Fix ActivityPub Webhook Error
之前的Ghost托管在PikaPods上面,其实相当于是Managed Ghost,所以你不需要去操心服务器的配置。最近换了服务商,那么情况就不一样了,遇到的所有问题都需要自己去处理,其中一个就是ActivityPub无法正常使用。 错误排查 查看log后发现报错:No Webhook Secret Found。 原因分析 * /.ghost/activitypub/* * /.well-known/webfinger * /.well-known/nodeinfo 上面三个ActivityPub资源配置错误,并未通过https反对带至ap.ghost.org。 处理办法 将需要反代的路径添加至nginx配置文件即可: location ~ /.ghost/activitypub/* { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_se

这里说的是在traefik代理流量的场景,查阅了网上的资料,基本上是找不到现成的解决办法的。那么只有自己手动研究,算了,为了这个功能去把traefik研究一遍,这个难度也太大了,还是还是交给AI去处理吧,我试过好几个工具,都不能解决问题,最后我还是交给DeepSeek后才把问题解决,DS确实厉害。

labels:
	  
    
      # ---------- 1. 后端服务声明(主博客) ----------
      - traefik.http.services.ghost-svc.loadbalancer.server.port=2368
    
      # ---------- 2. 外部服务声明(ActivityPub 代理目标) ----------
      # 定义一个 upstream 指向 ap.ghost.org,Traefik 会将请求反向代理过去
      - traefik.http.services.ap-ghost.loadbalancer.server.url=https://ap.ghost.org
    
      # ---------- 3. 中间件:设置请求头(模拟 Nginx 的 proxy_set_header) ----------
      - traefik.http.middlewares.ap-headers.headers.customrequestheaders.X-Forwarded-For={{ .RemoteAddr }}
      - traefik.http.middlewares.ap-headers.headers.customrequestheaders.X-Forwarded-Proto=https
      - traefik.http.middlewares.ap-headers.headers.customrequestheaders.X-Real-IP={{ .RemoteAddr }}
      - traefik.http.middlewares.ap-headers.headers.customrequestheaders.Host=ap.ghost.org
    
      # ---------- 4. 路由 A:ActivityPub 及联邦协议路径(代理到官方) ----------
      - traefik.http.routers.ghost-ap.rule=Host(`typenode.net`) && (PathPrefix(`/.ghost/activitypub`) || PathPrefix(`/.well-known`))
      - traefik.http.routers.ghost-ap.entrypoints=websecure
      - traefik.http.routers.ghost-ap.tls.certresolver=letsencrypt
      # 使用外部服务,并应用头部中间件
      - traefik.http.routers.ghost-ap.service=ap-ghost
      - traefik.http.routers.ghost-ap.middlewares=ap-headers@docker
    
      # ---------- 5. 路由 B:主网站正常访问(兜底匹配) ----------
      - traefik.http.routers.ghost.rule=Host(`typenode.net`)
      - traefik.http.routers.ghost.entrypoints=websecure
      - traefik.http.routers.ghost.tls.certresolver=letsencrypt
      - traefik.http.routers.ghost.service=ghost-svc

       # 👇 http-header
      - traefik.http.middlewares.ghost-secure.headers.framedeny=true
      - traefik.http.middlewares.ghost-secure.headers.browserXssFilter=true
      - traefik.http.middlewares.ghost-secure.headers.contentTypeNosniff=true
      - traefik.http.middlewares.ghost-secure.headers.stsSeconds=31536000
      - traefik.http.middlewares.ghost-secure.headers.stsIncludeSubdomains=true
      - traefik.http.middlewares.ghost-secure.headers.stsPreload=true
      - traefik.http.middlewares.ghost-secure.headers.referrerPolicy=strict-origin-when-cross-origin
      - traefik.http.routers.ghost.middlewares=ghost-secure

上面的代码直接放进Dokploy里面你的Ghost项目Compose File里面即可,位置放到services→ghost,volumes的下面即可。

上面的配置内容不仅包括了ActivityPub正常运行的内容,为了提升网站的安全性,还额外增加了http-header相关的内容。

阅读更多

更好的字幕翻译工具

更好的字幕翻译工具

如果你还在找一个更好的字幕翻译工具,那么就是是“沉浸式翻译”这个浏览器插件把,免费版本可以使用微软翻译、硅基流动翻译、GlM-4 Flash和Babel lite。 我测试了一下《挽救计划》的英文字幕,翻译成中文。这部电影的字幕其实难度还是挺大的,不过就我测试了硅基流动翻译、GlM-4 Flash和Babel lite 3个模型的翻译效果,这里推荐Babel lite模型。原因如下: 字幕里面有一个断句的 文本,Babel lite能准确翻译出原文表达的意思: 00:09:4900:09:52Over the next 30 years, the Earth could在未来 30 年,地球可能会 00:09:5200:09:55cool maybe 10凉爽,也许 10

By typenode
给网站添加view-transition动画

给网站添加view-transition动画

view-transition是一个很专业的功能,可以通过CSS去实现网页动画,在跨网页浏览上启用view-transition,无需多余配置即可获得一个优雅的网站页面切换效果。 适用于多页面应用的跨文档视图过渡 | View Transitions | Chrome for Developers开始在您的多页应用 (MPA) 中使用跨文档视图过渡。Chrome for DevelopersX demo: HomecamelCase 配置 在Code injection里面添加如下代码即可: <style> @view-transition { navigation: auto; } ::view-transition-group(root){ animation-duration:600ms } </style> 如果你还想更丰富的动画,可以参考下面的几个方案: 滑动进入 + 淡出 <style> @view-transition { navigation: auto;

By typenode
Fix ActivityPub Webhook Error

Fix ActivityPub Webhook Error

之前的Ghost托管在PikaPods上面,其实相当于是Managed Ghost,所以你不需要去操心服务器的配置。最近换了服务商,那么情况就不一样了,遇到的所有问题都需要自己去处理,其中一个就是ActivityPub无法正常使用。 错误排查 查看log后发现报错:No Webhook Secret Found。 原因分析 * /.ghost/activitypub/* * /.well-known/webfinger * /.well-known/nodeinfo 上面三个ActivityPub资源配置错误,并未通过https反对带至ap.ghost.org。 处理办法 将需要反代的路径添加至nginx配置文件即可: location ~ /.ghost/activitypub/* { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_se

By typenode
DNSRelay,支持H3、DoQ、DNSSEC、ECS和拦截规则的安卓客户端

DNSRelay,支持H3、DoQ、DNSSEC、ECS和拦截规则的安卓客户端

最近1年时间都是用Null Private的DNS服务,在安卓手机上可以直接使用DoT,不需要第三方客户端,但是有时候感觉还是不方便,不过最近Adguard客户端有很多问题,经常后台退出,或者过度拦截。于是去商店找了几款DNS客户端体验,而目前支持H3的DNS客户端数量非常少,其中DNSRelay的体验还真的不错。这是2025年11月发上架的新APP,参考下载地址: https://apkcombo.com/tw/dnsrelay-secure-dns-proxy/com.sonlabs.dnsrelay/ 官方介绍: 功能 1.隐私 这款DNS客户端首要优势就是支持主流的DNS协议,包括DNS-over-HTTPS (DoH)、DNS-over-TLS (DoT)、DNS-over-QUIC (DoQ) 以及 HTTP/3。那么阿里云的H3 DNS就可以派上用场了,还有易安云的DoQ以及Null Private的H3都能用上了。而像HTTP/3这种集大成的DNS协议,是目前你能用到的最好的协议。 阿里云:h3://dns.alidns.com/dns

By typenode