跳到主內容

【常見問題】通訊協定&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.comport 3000(用 TLS)
http://a.b.com:3000 a.b.comport 3000(無加密)
http://a.b.com a.b.comport 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:3000https://a.b.com:3000
正式站公開服務 https://a.b.com(預設 port 443)
Nginx 反向代理串接後端 視你要轉發的是 HTTP or HTTPS 及 port 而定

如你需要一份完整支援三種 port 的 nginx.conf 以及搭配 Express 的後端範例,我可以幫你整合好。需要嗎?