【常見問題】通訊協定&port 在呼叫上的差異
以下是針對你提到的三種不同 URL 呼叫方式:
1. https://a.b.com:3000
2. http://a.b.com:3000
3. http://a.b.com
✅ 一、三種呼叫差異總覽
呼叫方式 | 協定 | Port | 是否加密 | 對 Nginx 的需求 | 常見用途 |
---|---|---|---|---|---|
https://a.b.com:3000 |
HTTPS | 3000 | ✅ 是 | listen 3000 ssl; |
測試自訂 HTTPS port |
http://a.b.com:3000 |
HTTP | 3000 | ❌ 否 | listen 3000; |
自訂 HTTP port 開發 |
http://a.b.com |
HTTP | 80 | ❌ 否 | listen 80; (預設) |
一般公開網站 |
✅ 二、為什麼會有差異?
1. 協定不同(HTTP vs HTTPS)
-
HTTP:明文傳輸,不需要 TLS 憑證。
-
HTTPS:加密傳輸,需要 SSL 憑證,並透過 TLS 握手。
2. Port 不同(預設 vs 自訂)
-
HTTP 預設是 80、HTTPS 預設是 443。
-
如果你指定其他 port(如 3000),伺服器端(如 Nginx)必須額外開啟對應的 port 並配置好 listen 與憑證。
✅ 三、Nginx 實際設定對應
1️⃣ 對應 https://a.b.com:3000
server {
listen 3000 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:4000;
}
}
🔒 加密連線,必須設定
ssl
與有效憑證。
2️⃣ 對應 http://a.b.com:3000
server {
listen 3000;
server_name a.b.com;
location / {
proxy_pass http://localhost:4000;
}
}
🔓 明文傳輸,不需要 SSL 憑證。適用於測試環境或內網。
3️⃣ 對應 http://a.b.com
server {
listen 80;
server_name a.b.com;
location / {
proxy_pass http://localhost:4000;
}
}
🌐 最常見的網站 HTTP 配置。不需帶 port。
✅ 四、連線行為對照表
使用者輸入網址 | 瀏覽器或 curl 發出的請求會去到哪裡? |
---|---|
https://a.b.com:3000 |
a.b.com 的 port 3000(用 TLS) |
http://a.b.com:3000 |
a.b.com 的 port 3000(無加密) |
http://a.b.com |
a.b.com 的 port 80 |
✅ 五、常見錯誤與排查
問題 | 原因 | 解法 |
---|---|---|
curl https://a.b.com:3000 報錯 TLS |
你設定了 HTTPS,但 Nginx 未加上 ssl 或憑證有誤 |
加上 ssl 並設定憑證 |
只能用 http://a.b.com ,其他都失敗 |
Nginx 只開 port 80,沒開 3000 | 增加對應 listen 3000 的設定 |
呼叫 http://a.b.com:3000 被拒絕 |
Server 未開啟該 port | 檢查防火牆、Nginx、Docker 映射是否有允許 3000 |
✅ 六、總結:選擇哪一種?
使用場景 | 建議呼叫方式 |
---|---|
內部開發測試 | http://a.b.com:3000 或 https://a.b.com:3000 |
正式站公開服務 | https://a.b.com (預設 port 443) |
Nginx 反向代理串接後端 | 視你要轉發的是 HTTP or HTTPS 及 port 而定 |
如你需要一份完整支援三種 port 的 nginx.conf
以及搭配 Express 的後端範例,我可以幫你整合好。需要嗎?