【常見問題】https 使用domain 與 ip 差異
好的,以下補上:
✅ 比較 https://a.b.com 與 https://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 或自簽 | 容易驗證失敗、跳警告 |