自訂網域 - Obsidian 說明您可以為 [[Obsidian Publish 介紹|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`
>
> 建立頁面規則後,為 `www.mysite.com` 建立 CNAME 記錄,方法與 `mysite.com` 相同。
**Obsidian:**
1. 在電腦上開啟 Obsidian。
2. 在左側的[[功能區選單|功能區]]中,點選**發佈變更** ![[lucide-send.svg#icon]]。
3. 在**發佈變更**下方,選擇**變更網站選項** ![[lucide-cog.svg#icon]]。
4. 在**自訂網域**旁邊,選擇**設定**。
5. 在**自訂網址**中,輸入您網域或子網域的 URL。請確保不要在自訂網址欄位中加入 `www.`。
> [!note] 備註
> 如果您的自訂網域設定陷入重新導向迴圈,很可能是因為 CloudFlare 中的加密模式被設為「Flexible」而非「Full」。
## 使用代理伺服器設定
您也可以使用自己的網頁伺服器為自訂網域設定 SSL/TLS。
如果您已在網域或子網域下託管網站,也可以使用此選項,將網站設定為在特定 URL 路徑下載入您的 Obsidian Publish 網站,而非託管完整網站。
將該 URL 路徑下的所有請求代理至 `https://publish.obsidian.md/serve?url=mysite.com/my-notes/...`,並在 Obsidian 中將網站選項設定為相同的 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;
}
```
部分使用者回報可能需要在 proxy pass 中加入 `$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` 中,[設定 rewrites](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` 連結造訪過網站,您可能需要清除瀏覽器快取,某些功能(如字型、圖表或密碼存取)才能正常運作。這是由於現代瀏覽器施加的跨網域安全限制所致。好消息是,如果您只讓訪客使用自訂網域,他們應該不會遇到此問題。