跳到主內容

【常見問題】https 使用domain 與 ip 差異

好的,以下補上:


✅ 比較 https://a.b.comhttps://168.23.1.1 的差異

這兩者協定一樣(都是 HTTPS),但主機名稱(Host)差異會影響 SSL 憑證驗證、DNS 解析、與 Nginx 的設定行為


🔍 差異對照表

項目 https://a.b.com https://168.23.1.1
協定 HTTPS(加密) HTTPS(加密)
主機名稱 網域名稱(FQDN) IP 位址
DNS 解析 會經過 DNS 解析 → IP 不經 DNS
SSL 憑證驗證 通常需要憑證中的 CN/SAN 包含 a.b.com 需要憑證中包含 IP 位址(不常見)
Nginx server_name 配置 server_name a.b.com; server_name 168.23.1.1;(不建議)或 _
常見用法 公網、正式站、內部網域皆可 測試、開發、內網 IP 使用
風險與限制 SSL 憑證驗證容易通過 一般憑證不支援 IP → 會出現 TLS 錯誤
信任憑證 可用 Let's Encrypt、商業憑證 除非特別申請 IP 憑證,否則會有警告

📌 SSL 憑證驗證差異舉例

🎯 https://a.b.com

  • 若你使用 Let's Encrypt 為 a.b.com 建立憑證:
    curl https://a.b.com ➜ 成功(CN/SAN 包含 a.b.com

⚠️ https://168.23.1.1

  • 若你拿 a.b.com 憑證套用到 IP 上:
    curl https://168.23.1.1 ➜ 失敗,出現 SSL: certificate subject name does not match

✅ 解法(不建議用於正式環境):

  • 為 IP 簽發 SSL 憑證(需自簽或企業憑證)

  • curl -k 忽略憑證錯誤

curl -k https://168.23.1.1  # 跳過憑證驗證(不安全)

✅ Nginx 設定差異

a.b.com 對應設定:

server {
    listen 443 ssl;
    server_name a.b.com;

    ssl_certificate     /etc/nginx/certs/a.b.com.crt;
    ssl_certificate_key /etc/nginx/certs/a.b.com.key;

    location / {
        proxy_pass http://localhost:3000;
    }
}

IP 直接連線時,通常會用:

server {
    listen 443 ssl;
    server_name _;  # 匹配所有 hostname(或不設定)

    ssl_certificate     /etc/nginx/certs/selfsigned.crt;
    ssl_certificate_key /etc/nginx/certs/selfsigned.key;

    location / {
        proxy_pass http://localhost:3000;
    }
}

🧨 若直接用 IP,也許不會觸發 server_name 對應,取決於 Nginx 設定順序與 SNI。


✅ 小結

URL 適用時機 憑證需求 風險
https://a.b.com 公網、正常使用 CN/SAN 需含 a.b.com 正常通過憑證驗證
https://168.23.1.1 內部測試或特例 憑證需含 IP 或自簽 容易驗證失敗、跳警告