你可以为你的 [[发布服务简介|Obsidian Publish]] 网站设置自定义域名或子域名。 > [!warning] 警告 > 目前,我们仅支持以下方式配置自定义域名: > > - [[#使用 CloudFlare 设置]],使用 [Full 模式](https://developers.cloudflare.com/ssl/origin-configuration/ssl-modes/full/)。 > - [[#使用代理设置]] > > 我们目前还无法代你配置 SSL 证书。 ## 使用 CloudFlare 设置 设置自定义域名或子域名最简单的方式是创建一个 [CloudFlare](https://cloudflare.com) 账户,并让 CloudFlare 管理你的域名 DNS。 以下步骤使用 CloudFlare 为你的 Obsidian Publish 网站配置自定义域名,支持根域名(`mysite.com`)或子域名(`notes.mysite.com`)。 > [!important] 重要 > CloudFlare 是**唯一官方支持的供应商**,用于设置自定义域名。使用其他供应商按以下说明操作很可能无法正常工作。 **CloudFlare:** 1. 在 Cloudflare 中打开你要用于托管 Publish 网站的域名,例如 `mysite.com`,即使你想使用子域名如 `notes.mysite.com` 也是如此。 2. 进入 **DNS** 并点击 **Add Record**。 3. 选择 **CNAME**。 4. 在 **name** 中输入你的域名或子域名,例如 `notes.mysite.com`。 5. 在 **target** 中输入 `publish-main.obsidian.md`。请勿在此值中包含你的个人子 URL。Obsidian Publish 会根据你的配置自动处理。 6. 确保 **proxy status** 已启用。默认情况下应为启用状态。 7. 进入 **SSL/TLS** 并将 SSL/TLS 加密模式设置为"Full"以自动配置 SSL/TLS 证书。 > [!note] 备注 > 如果要将 `mysite.com` 和 `www.mysite.com` 都重定向到 Obsidian Publish,你需要创建一个 [Page Rule](https://support.cloudflare.com/hc/en-us/articles/200172336-Creating-Page-Rules),设置如下: > > - URL match:`www.mysite.com/*` > - Forward URL - 301 Permanent Redirect > - Redirect URL:`https://mysite.com/$1` > > 创建页面规则后,像为 `mysite.com` 一样为 `www.mysite.com` 创建 CNAME 记录。 **Obsidian:** 1. 在电脑上打开 Obsidian。 2. 在左侧的[[功能区]]中,点击 **发布更改**( ![[lucide-send.svg#icon]] )。 3. 在 **发布更改** 下,选择 **更改网站设置**( ![[lucide-cog.svg#icon]] )。 4. 在 **自定义域名** 旁边,选择 **配置**。 5. 在 **自定义 URL** 中,输入你的域名或子域名 URL。请确保不要在自定义 URL 框中输入 `www.`。 > [!note] 备注 > 如果你的自定义域名设置导致了重定向循环,很可能是因为 CloudFlare 中的加密模式被设置为"Flexible"而非"Full"。 ## 使用代理设置 你也可以使用自己的 Web 服务器为自定义域名设置 SSL/TLS。 如果你已经在域名或子域名下托管了网站,你也可以使用此方式,将网站设置为在特定 URL 路径下加载你的 Obsidian Publish 网站,而不是托管整个网站。 将该 URL 路径下的所有请求代理到 `https://publish.obsidian.md/serve?url=mysite.com/my-notes/...`,并在 Obsidian 中将网站设置中的 **自定义 URL** 设置为相同的 URL 路径,即 `mysite.com/my-notes`。 你还可以将 Obsidian Publish 设置为你所拥有网站的子 URL。例如,`https://mysite.com/my-notes/`。为此,你必须托管自己的服务器,并将所有请求代理到我们的服务器 `https://publish.obsidian.md/`。 以下代理设置示例并非详尽无遗,但提供了常见的实现方法。 ### NGINX 在你的 NGINX 配置中,添加以下内容: ```nginx location /my-notes { proxy_pass https://publish.obsidian.md/serve?url=mysite.com/my-notes/; proxy_ssl_server_name on; proxy_set_header Host publish.obsidian.md; } ``` 一些用户反馈可能需要在代理路径中添加 `$request_uri`: ```nginx location /my-notes { proxy_pass https://publish.obsidian.md/serve?url=mysite.com/my-notes$request_uri; proxy_ssl_server_name on; proxy_set_header Host publish.obsidian.md; } ``` ### Apache 在 `.htaccess` 中,添加以下内容: ```htaccess RewriteEngine on RewriteRule "^my-notes/(.*)quot; "https://publish.obsidian.md/serve?url=mysite.com/my-notes/$1" [L,P] ``` > [!note] 备注 > 必须启用 `mod_rewrite`,你可能还需要配置 [SSLProxyEngine](https://stackoverflow.com/questions/40938148/reverse-proxy-for-external-url-apache) ### Netlify 在 `netlify.toml` 中,[配置重定向](https://docs.netlify.com/routing/redirects/#syntax-for-the-netlify-configuration-file): ```plain [[redirects]] from = "https://mysite.com/my-notes/*" to = "https://publish.obsidian.md/serve?url=mysite.com/my-notes/:splat" status = 200 force = true ``` ### Vercel 在 `vercel.json` 中,[配置重写](https://vercel.com/docs/configuration#project/rewrites): ```json { ... "rewrites": [ { "source": "/my-notes/", "destination": "https://publish.obsidian.md/serve?url=mysite.com/my-notes" }, { "source": "/my-notes/:path*", "destination": "https://publish.obsidian.md/serve?url=mysite.com/my-notes/:path*" } ] } ``` ### Caddy ```plain mysite.com { encode zstd gzip handle /my-notes* { reverse_proxy https://publish.obsidian.md { header_up Host {upstream_hostport} } rewrite * /serve?url=mysite.com{path} } } ``` ### Traefik 以下最小配置摘录将 `mysite.com` 重定向到 Obsidian Publish。 完整示例请参阅 [Traefik 文档](https://doc.traefik.io/traefik/routing/overview/)。 ```yaml http: routers: mysite: rule: Host(`mysite.com`) service: obsidian-publish middlewares: - "publish-headers" services: obsidian-publish: loadBalancer: servers: - url: https://publish.obsidian.md middlewares: publish-headers: headers: customRequestHeaders: Host: "publish.obsidian.md" x-obsidian-custom-domain: "mysite.com" ``` ### 支持的 HTTP X-Headers 如果你的代理服务不允许查询路径,你可以使用 `https://publish.obsidian.md/` 并设置自定义请求头 `x-obsidian-custom-domain`,值为你的网站 URL `mysite.com/my-subpath`。 ## 将旧网站重定向到自定义域名 如果你想将访客从旧的 `publish.obsidian.md` 网站重定向到你的新自定义域名,请在配置自定义域名时启用 **重定向至你的自定义域名** 选项。 ## 故障排除 设置自定义域名后,如果你之前通过 `https://publish.obsidian.md/slug` 链接访问过你的网站,你可能需要清除浏览器缓存,以使某些功能(如字体、关系图谱或密码访问)正常工作。这是由于现代浏览器施加的跨域安全限制所致。好消息是,如果你只让访客使用你的自定义域名,他们永远不会遇到此问题。