域名與 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 解析不夠,伺服器也得認這個域名,否則訪問會打到預設站點或直接報錯。
aaPanel(寶塔):Website(網站)→ 點你的網站 → Domain Management(域名管理)→ 新增 abc.com 和 www.abc.com。
Docker 部署:不用綁域名。映像裡自帶 nginx,域名解析過來就能訪問,憑證直接在容器裡申請,見 Docker 怎麼上 HTTPS。
二、申請 HTTPS 憑證
aaPanel(最省事)
Website → 點你的網站 → SSL → 選 Let's Encrypt → 驗證方式選 HTTP File Verification(HTTP 檔案驗證)→ 勾上要簽的域名 → 申請。
簽發成功後,務必開啟 Force HTTPS(強制 HTTPS)開關 —— 否則 http:// 還是能訪問,瀏覽器不會自動跳轉。
憑證 90 天有效,aaPanel 會自動續期,不用管。
申請失敗怎麼辦
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 安裝。
aaPanel:
- Website → 點你的網站 → Domain Management,把所有域名都加進去
- 在 SSL 裡申請憑證時,把所有域名都勾上一起簽 —— 一張憑證可以覆蓋多個域名,漏掉哪個,那個域名訪問就會報憑證錯誤
讓多個域名跳到主域名
多個域名同時能訪問會分散 SEO 權重,通常讓副域名 301 跳到主域名。aaPanel 裡在 URL rewrite(偽靜態)的最前面加:
if ($host != 'abc.com') {
return 301 https://abc.com$request_uri;
}分站功能用到子域名時不要加這條,它會把所有分站域名也跳回主站。
五、泛域名憑證(分站必需)
開了分站之後,商家的店鋪地址是 xxx.abc.com。這類子域名是動態的、事先不知道有哪些,普通憑證簽不了,必須簽泛域名憑證 *.abc.com。
和普通憑證的區別
普通憑證用 HTTP 檔案驗證(訪問 /.well-known/...),泛域名憑證只能用 DNS 驗證 —— 需要在域名解析裡加一條 TXT 記錄來證明域名是你的。
aaPanel 怎麼簽
Website → 點你的網站 → SSL → Let's Encrypt → 驗證方式選 DNS Verification(DNS 驗證):
- 如果你的 DNS 服務商在 aaPanel 支援的清單裡,填上它的 API 金鑰,aaPanel 就能自動加 TXT 記錄並自動續期,強烈建議用這種
- 手動模式要自己去域名解析裡加 TXT 記錄,但每 90 天就要手動加一次,很容易忘了導致全站憑證過期
域名要簽的填兩條一起簽:
abc.com
*.abc.com
*.abc.com不包含abc.com本身,必須兩條都簽,否則主站會報憑證錯誤。
分站的完整檢查清單
子域名打不開時,按這個順序查(缺一不可):
| # | 檢查項 |
|---|---|
| 1 | 後臺 網站設定 → 其他設定 填了主站域名和 DNS-CNAME |
| 2 | 域名解析裡加了 * 的泛解析記錄,指向伺服器 IP |
| 3 | 伺服器上繫結了 *.abc.com(aaPanel 的 Domain Management 裡加這一條)——最容易漏 |
| 4 | 簽了 *.abc.com 的泛域名憑證 |
詳見分站模組。
六、常見問題
瀏覽器顯示「不安全」或憑證錯誤 訪問的域名沒被憑證覆蓋。檢查申請憑證時是不是漏勾了這個域名;子域名要泛域名憑證。
裝了憑證但 http:// 還能訪問 Docker:acg-ssl 跑完強制跳轉就已經開了,還能進說明憑證沒簽成功或 nginx 沒重新載入,重跑一次即可。aaPanel:在網站的 SSL 頁面開啟 Force HTTPS。
開了強制 HTTPS 後打不開 / 無限跳轉 用了 CDN 或反代時,回源方式與強制跳轉打架:CDN 回源走 http,站點又強制跳 https,就繞不出來。把 CDN 的回源協議改成 HTTPS,或者把站點這邊的強制跳轉關掉、交給 CDN 做 —— Docker 是 docker exec faka acg-ssl 你的域名 你的郵箱 --no-redirect,aaPanel 是關掉 Force HTTPS。
換域名後前臺圖片、樣式全亂 後臺的站點域名還是舊的。到 網站設定 裡把域名改過來,並清一下模板快取(刪除 runtime/view/compile 目錄下的內容)。
支付回撥失敗 支付平臺後臺配的回撥地址還是舊域名。另外 CDN 防火牆也可能攔截回撥,見網站設定裡的自定義支付回撥域名。
