Skip to content

域名與 HTTPS 憑證 ​

裝好之後最常見的兩件事:換成自己的域名、上 HTTPS。再往後是綁多個域名、給分站配泛域名憑證。

分站(子域名)要的是泛域名憑證,和普通憑證的申請方式不一樣,直接看泛域名憑證那一節。

一、繫結域名 ​

第 1 步:解析到伺服器 ​

到你買域名的地方(阿里雲、騰訊雲、Cloudflare 等)新增解析:

記錄型別主機記錄記錄值
A@你的伺服器 IP
Awww你的伺服器 IP

@ 是不帶字首的裸域名(abc.com),www 是 www.abc.com。兩條都加,使用者輸哪個都能開啟。

解析生效一般幾分鐘。驗證:

bash
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:

bash
docker run -d --name faka -p 80:80 -p 443:443 -v acg_data:/data --restart unless-stopped ghcr.io/lizhipay/acg-faka:latest

一條命令簽好憑證(換成你的域名和郵箱):

bash
docker exec faka acg-ssl shop.abc.com [email protected]

再加一條自動續期的定時任務(在宿主機上執行):

bash
(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:一條命令就夠了。域名排著寫,最後跟郵箱,它們會簽進同一張憑證:

bash
docker exec faka acg-ssl abc.com www.abc.com shop.abc.com [email protected]

以後要加域名,把所有域名一起重新跑一遍 —— 漏掉的會掉出憑證。另外只要有一個域名沒解析過來,整張憑證就簽不下來。詳見 Docker 安裝。

aaPanel:

  1. Website → 點你的網站 → Domain Management,把所有域名都加進去
  2. 在 SSL 裡申請憑證時,把所有域名都勾上一起簽 —— 一張憑證可以覆蓋多個域名,漏掉哪個,那個域名訪問就會報憑證錯誤

讓多個域名跳到主域名 ​

多個域名同時能訪問會分散 SEO 權重,通常讓副域名 301 跳到主域名。aaPanel 裡在 URL rewrite(偽靜態)的最前面加:

nginx
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 防火牆也可能攔截回撥,見網站設定裡的自定義支付回撥域名。

基於 MIT 協議開源