自定义域名 - Obsidian 中文帮助你可以为你的 [[发布服务简介|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` 链接访问过你的网站,你可能需要清除浏览器缓存,以使某些功能(如字体、关系图谱或密码访问)正常工作。这是由于现代浏览器施加的跨域安全限制所致。好消息是,如果你只让访客使用你的自定义域名,他们永远不会遇到此问题。