AWS 中國 - 為什麼 22 通了、80/443 卻完全連不到?(Nginx)

為什麼 22 通了、80/443 卻完全連不到?

AWS 中國區域 (cn-north-1 北京 / cn-northwest-1 寧夏)TCP 80、443、8080 等「網站服務常用埠」預設被封鎖
只有完成工信部 ICP 備案,並向 AWS 申請「開放網站埠」後,這些埠才會在骨幹網層被解除阻擋。
所以即使:

  • Security Group、Network ACL、Route Table 都已放行
  • Nginx 已經 LISTEN 0.0.0.0:80
  • 你能用 SSH (22) 登入同一台機器

外部還是會對 80/443 得到 connection timed out(或直接被 RST),因為封在 AWS 邊界路由器 上。


如何驗證確實是「中國區管制」所致?

  1. 在 Security Group 再開一個非常規埠(例如 8888)

    sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/test
    sudo sed -i 's/listen 80 default_server;/listen 8888 default_server;/' /etc/nginx/sites-available/test
    sudo ln -s /etc/nginx/sites-available/test /etc/nginx/sites-enabled/
    sudo systemctl reload nginx
    
  2. 從本地端嘗試:

    curl -I http://<ElasticIP>:8888
    
    • 能連上 → 代表路由/NACL 都沒問題,只是 80/443 被雲端側封鎖。
    • 依然連不到 → 才回頭檢查 VPC 設定。

由於 8888 並非「網路服務常用埠」,AWS (以及其他雲廠商像阿里/Tencent) 在中國區通常不會預封它。


解決方案

步驟 說明
1. 進行 ICP 備案 - 以公司或個人名義在工信部提交域名備案
- AWS 有專屬備案系統:
AWS IaaS ICP Filing System (https://beian.amazonaws.cn)
2. 將域名指到 EC2 彈性 IP 備案審批時要求域名 A 記錄指向中國區 IP。
3. 申請開通「網站常用埠」 - ICP 號碼核發後,登入 AWS Support Center → Create Case → Service Limit Increase → Port Opening
- 填入要開的埠(80 / 443 / 8080…)與對應 Elastic IP
- 一般 1-2 工作日內完成
4. 等待 AWS 通知 審核通過後,骨幹層的 ACL 會解除,外部即可正常訪問。

小提醒

  • 沒有 ICP 備案前,可用非常規埠 (8888、5000…) 測試功能,但正式上線仍須走 80/443。
  • 若你只需內網或跨區訪問,可直接用 VPC Peering / VPN,不受此限制。
  • 同一張備案可覆蓋多台 EC2,只要域名指過去即可。

快速 FAQ

問題 回答
為何 22 不受影響? 22 屬於「運維管理埠」,中國區沒有強制備案即可開放的限制。
一定要 80/443 才會被封嗎? AWS 中國目前只對常用 Web 埠(80、443、8080)進行預封鎖。其他高位埠如 8088、8888 不在黑名單。
備案多久? 工信部審批通常 7–20 天;企業名義較快,個人可能久一些。AWS 審核通過後還需向雲端申請開埠。

只要完成備案並向 AWS 申請開埠,現有的 Nginx 與 Security Group 設定就能立即生效,外部連線將會得到你目前看到的 404(或網站實際內容)。祝順利完成上線!

你的最新測試代表什麼?

測試指令 伺服器回應 意義
curl -I http://127.0.0.1:8888 200 OK Nginx 已經在 8888 監聽並能正常回傳頁面。
curl -I http://127.0.0.1 (80) 404 Not Found 80 埠同樣能收到請求,只是沒有對應檔案;Nginx 本身沒有問題。

➜ 機器內部網路與 Nginx 都運作正常;真正無法「從外網」連進 80/443 的原因並不在主機,而是在 AWS 中國區的骨幹層封鎖


為何 80 / 443 無法從外部連入?

  1. AWS 中國 (北京/寧夏) 受《互聯網訊息服務管理辦法》規範,網站常用埠 80 / 8080 / 443 在預設狀態皆被 SINNET / NWCD 封鎖
  2. 只有完成 ICP 備案,並向 AWS 另行提出「開埠申請」,AWS 才會在邊界路由器放行這些埠。(Amazon Web Services, Inc., Amazon Web Services, Inc.)
  3. 其他高位埠(如 8888)不屬於預封鎖範圍,所以機器內測得到 200 OK,也能在完成 Security Group 開放後被外網直接訪問(建議你再加一條 inbound 規則後,用本地電腦 curl -I http://<EIP>:8888 測試)。

如何正式打通 80 / 443?

步驟 必要行動 備註
1. 域名 ICP 備案 透過 https://beian.amazonaws.cn 送件(企業 7–20 天) 備案過程必須把 A 記錄指到中國區 Elastic IP。
2. AWS 開埠申請 ICP 編號核發後,進 Support Center → Create case → Service limit increase → Port Opening,填寫要放行的 EIP 與埠號(80 / 443 / 8080)。 一般 1–2 個工作日會解除封鎖。
3. 等通知生效 邊界 ACL 解除後,你就能從外網直接用 80/443 取得目前的 404 或 301 轉址頁面。

臨時或測試環境可採用的替代方案

作法 說明
使用高位埠(8888、5000 等) 只要在 Security Group 開放對應埠,外部即可訪問,無須備案。但正式對外服務仍需 80/443。
架設在中國區外、以 CloudFront / Global Accelerator 回源 流量先打到全球節點,再走內部通道回中國區外主機,繞開備案限制;但若你的內容要面向中國大陸使用者,域名最終仍需備案。
API / 內部服務走 VPC Peering / VPN 不對公網開 80/443,即無備案需求。

下一步行動清單

  1. 在 Security Group 再加一條 8888/TCP → 0.0.0.0/0,用自己電腦測試 curl -I http://<ElasticIP>:8888
    若通=已驗證路由無誤,80/443 的問題確定來自骨幹封鎖。

  2. 決定是否要對外提供網站服務:

    • 需要 → 立即啟動 ICP 備案流程。
    • 僅測試或內部用途 → 暫時用 8888、5000 等非預封鎖埠即可。
  3. 備案通過後,記得向 AWS Support 申請開啟 80/443,並重新測試。

完成以上步驟後,你的站點就能像一般 AWS Region 一樣,正常用 80/443 對外服務。祝你排障順利!