域名與 HTTPS 證書
裝好之後最常見的兩件事:換成自己的域名、上 HTTPS。再往後是綁多個域名、給分站配泛域名證書。
分站(子域名)要的是泛域名證書,和普通證書的申請方式不一樣,直接看泛域名證書那一節。
一、繫結域名
第 1 步:解析到伺服器
到你買域名的地方(阿里雲、騰訊雲、Cloudflare 等)新增解析:
| 記錄型別 | 主機記錄 | 記錄值 |
|---|---|---|
| A | @ | 你的伺服器 IP |
| A | www | 你的伺服器 IP |
@ 是不帶字首的裸域名(abc.com),www 是 www.abc.com。兩條都加,使用者輸哪個都能開啟。
解析生效一般幾分鐘。驗證:
ping abc.com能 ping 出你的伺服器 IP 就成了(ping 不通但顯示 IP 也算成功,很多伺服器禁 ping)。
第 2 步:在伺服器上繫結
光有 DNS 解析不夠,伺服器也得認這個域名,否則訪問會打到預設站點或直接報錯。
寶塔面板:網站 → 點你的站點 → 域名管理 → 新增 abc.com 和 www.abc.com。
Docker 部署:不用綁域名。映像裡自帶 nginx,域名解析過來就能訪問,證書直接在容器裡申請,見 Docker 怎麼上 HTTPS。
二、申請 HTTPS 證書
寶塔(最省事)
網站 → 點你的站點 → SSL → 選 Let's Encrypt → 勾上要簽的域名 → 申請。
簽發成功後,務必開啟「強制 HTTPS」 —— 否則 http:// 還是能訪問,瀏覽器不會自動跳轉。
證書 90 天有效,寶塔會自動續期,不用管。
申請失敗怎麼辦
Let's Encrypt 簽發前會訪問 http://你的域名/.well-known/acme-challenge/xxx 做驗證,這一步失敗就簽不下來:
| 現象 | 原因 |
|---|---|
| 提示驗證失敗 / 404 | 域名還沒解析到這臺伺服器,或解析沒生效 |
| 提示連線超時 | 伺服器 80 連接埠沒開(雲伺服器要在安全組裡放行 80) |
| 套了 CDN 後簽不下來 | 先把 CDN 關掉簽完再開,或改用 DNS 驗證 |
| 一天內失敗多次後一直失敗 | Let's Encrypt 有頻率限制,等一小時再試 |
程式自帶的偽靜態規則已經放行了
.well-known目錄,不會擋住證書驗證。如果你自己改過偽靜態,注意別把它擋掉,見偽靜態規則。
三、Docker 怎麼上 HTTPS
映像裡已經帶了 nginx 和 certbot,證書在容器裡簽,不需要面板、也不用另外起反向代理。
容器同時對映 80 和 443:
docker run -d --name faka -p 80:80 -p 443:443 -v acg_data:/data --restart unless-stopped ghcr.io/lizhipay/acg-faka:latest一條命令簽好證書(換成你的域名和郵箱):
docker exec faka acg-ssl shop.abc.com [email protected]再加一條自動續期的定時任務(在宿主機上執行):
(crontab -l 2>/dev/null; echo "0 3 * * * docker exec faka acg-ssl-renew") | crontab -證書和 nginx 配置都寫在資料卷裡,換映像、重建容器都不會丟。完整說明與排錯見 Docker 安裝。
伺服器上已經跑著別的網站、80 被佔用時,才需要用前置反代把容器代理出去;那種情況下不要跑
acg-ssl,證書交給前面那層管。
已經有證書了(Cloudflare 源站證書、買的商業證書)? 用
acg-ssl-import直接裝進去,不用申請 Let's Encrypt,泛域名也支援 —— 見 Docker 安裝。
四、繫結多個域名
一個站點綁多個域名很常見:換了新域名要保留舊的、或者主域名 + 短域名一起用。
先做這一步(兩種部署都一樣):每個域名都在 DNS 解析到同一臺伺服器 IP。
Docker:一條命令就夠了。域名排著寫,最後跟郵箱,它們會簽進同一張證書:
docker exec faka acg-ssl abc.com www.abc.com shop.abc.com [email protected]以後要加域名,把所有域名一起重新跑一遍 —— 漏掉的會掉出證書。另外只要有一個域名沒解析過來,整張證書就簽不下來。詳見 Docker 安裝。
寶塔:
- 網站 → 站點設定 → 域名管理,把所有域名都加進去
- SSL 裡申請證書時,把所有域名都勾上一起簽 —— 一張證書可以覆蓋多個域名,漏掉哪個,那個域名訪問就會報證書錯誤
讓多個域名跳到主域名
多個域名同時能訪問會分散 SEO 權重,通常讓副域名 301 跳到主域名。寶塔裡在偽靜態最前面加:
if ($host != 'abc.com') {
return 301 https://abc.com$request_uri;
}分站功能用到子域名時不要加這條,它會把所有分站域名也跳回主站。
五、泛域名證書(分站必需)
開了分站之後,商家的店鋪地址是 xxx.abc.com。這類子域名是動態的、事先不知道有哪些,普通證書簽不了,必須簽泛域名證書 *.abc.com。
和普通證書的區別
普通證書用 HTTP 檔案驗證(訪問 /.well-known/...),泛域名證書只能用 DNS 驗證 —— 需要在域名解析里加一條 TXT 記錄來證明域名是你的。
寶塔怎麼簽
網站 → 站點 → SSL → Let's Encrypt → 驗證方式選 DNS 驗證:
- 如果你的域名在阿里雲/騰訊雲,寶塔支援填 API 金鑰自動加 TXT 記錄並自動續期,強烈建議用這種
- 手動模式要自己去域名解析里加 TXT 記錄,但每 90 天就要手動加一次,很容易忘了導致全站證書過期
域名要簽的填兩條一起簽:
abc.com
*.abc.com
*.abc.com不包含abc.com本身,必須兩條都簽,否則主站會報證書錯誤。
分站的完整檢查清單
子域名打不開時,按這個順序查(缺一不可):
| # | 檢查項 |
|---|---|
| 1 | 後臺 網站設定 → 其他設定 填了主站域名和 DNS-CNAME |
| 2 | 域名解析里加了 * 的泛解析記錄,指向伺服器 IP |
| 3 | 伺服器上繫結了 *.abc.com(寶塔的域名管理里加這一條)——最容易漏 |
| 4 | 簽了 *.abc.com 的泛域名證書 |
詳見分站模組。
六、常見問題
瀏覽器顯示「不安全」或證書錯誤 訪問的域名沒被證書覆蓋。檢查申請證書時是不是漏勾了這個域名;子域名要泛域名證書。
裝了證書但 http:// 還能訪問 Docker:acg-ssl 跑完強制跳轉就已經開了,還能進說明證書沒簽成功或 nginx 沒重新載入,重跑一次即可。寶塔:SSL 頁面右上角開啟「強制 HTTPS」。
開了強制 HTTPS 後打不開 / 無限跳轉 用了 CDN 或反代時,回源方式與強制跳轉打架:CDN 回源走 http,站點又強制跳 https,就繞不出來。把 CDN 的回源協議改成 HTTPS,或者把站點這邊的強制跳轉關掉、交給 CDN 做 —— Docker 是 docker exec faka acg-ssl 你的域名 你的郵箱 --no-redirect,寶塔是關掉「強制 HTTPS」。
換域名後前臺圖片、樣式全亂 後臺的站點域名還是舊的。到 網站設定 裡把域名改過來,並清一下模板快取(刪除 runtime/view/compile 目錄下的內容)。
支付回撥失敗 支付平臺後臺配的回撥地址還是舊域名。另外 CDN 防火牆也可能攔截回撥,見網站設定裡的自定義支付回撥域名。
