Host Based Routing & Solar Network Pages|Devlog#11
最近 Solar Network 上了一个新功能,叫做 Solar Network Pages,跟 GitHub Pages 一样,你可以在上面托管静态页面。不过如果你选择 Fully Managed 模式的话,Solar Network 会在你选择域名上自动渲染一个基于你的发布者和帐号数据的博客。
如图,个人是觉得样式还蛮好看的 不然指望我说什么 Styling 是基于 Tailwind CSS 和 DaisyUI 的实现。
你现在也可以去自己的 创作者中心 > Publication Sites 来创建一个。
实现
Solar Network Pages 的网络架构大致为:
- Cloudflare 一般我不开 Cloudflare Proxied,主要是泛域名证书有点麻烦所以直接让 Cloudflare 帮我 Handle
- Caddy Reverse Proxy 用来处理域名的访问将其翻译让后面的服务可以更好的处理
- DysonNetwork.Zone 应用服务器
其中最重要的莫过于 Caddyfile 的配置了
# solian.page - Solian Pages
*.solian.page, solian.page {
# Use your Cloudflare Origin CA cert and key
tls /srv/solian-pages/cf/origin.crt /srv/solian-pages/cf/origin.key
# This matcher captures the host so we can use it
@allHosts {
host *.solian.page
}
handle @allHosts {
reverse_proxy /drive/* localhost:5001
reverse_proxy localhost:8192 {
header_up Host {http.request.host}
header_up X-SiteName {labels.2}
}
}
}
Caddy 要干的事便是将用户访问的域名(比如说 littlesheep.solian.page)来转换成请求头 X-SiteName,应用服务器会读取这个请求头来渲染对应的页面。这里的 {labels.2} 就是 Caddyfile 的一个语法来将域名的最开头一段提取出来 header_up 便是 Caddy 中修改请求头的语法
为什么不用 Nginx?因为 Caddy 的配置文件非常简单,同样的操作在 Nginx 可能要写很多行。同时 Caddy 还 Bundle 了 Certbot,可以自动生成 SSL 证书。同样的操作在 Nginx 可能就要手动配置 crontab 和 certbot 或者使用第三方的软件来管理 Nginx。
其中应用服务器有一个 Middleware 来读取请求头的 X-SiteName 来渲染对应的页面出来。不用怎么担心安全性的问题,因为客户端填写这个请求头会被反代洗掉。
为什么不直接让应用服务器根据 Host 头来渲染页面?理论和实际上却是都可以,但是在本地测试的时候就避免不了要修改 hosts 文件或者另起一个 DNS 来处理相关的事项。这里我可以直接用下面的 Caddyfile 启动一个本地的 Caddy server 来处理这种情况。
http://localhost:3001 {
reverse_proxy localhost:8007 {
header_up X-SiteName "ciallo"
}
}
轻松 + 愉快。现在不放就去创作者中心创建一个 Publication Site 来抢占域名吧!