我在 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體上託管我的網站。我希望使用者透過 HTTP(連接埠 80)或 HTTPS(連接埠 443)連接到我的網站。
解決方法
若要允許連接埠 80 和 443 上的流量,必須設定關聯的安全群組和網路存取控制清單 (network ACL)。
安全群組規則
對於 HTTP 流量,請在連接埠 80 上新增從來源位址 0.0.0.0/0 的傳入規則。
對於 HTTPS 流量,請在連接埠 443 上新增從來源位址 0.0.0.0/0 的傳入規則。
這些傳入規則允許來自 IPv4 位址的流量。若要允許 IPv6 流量,請在相同的連接埠上新增從來源位址 ::/0 的傳入規則。如需關於建立或修改安全群組的詳細資訊,請參閱使用安全群組控制資源的流量。
安全群組具有狀態,因此自動允許從執行個體傳回使用者的流量。您不需要修改安全群組的傳出規則。
注意: 下列範例顯示在 TCP 連接埠 80 (HTTP) 和 443 (HTTPS) 上允許 IPv4 和 IPv6 流量的安全群組規則。確定您的使用案例是否必須允許其他流量來源 (例如 SSH 或 RDP) 登入執行個體。然後,請確保您的 SG 具有相關的傳入規則以允許所需的流量。
傳入規則
| | | |
---|
類型 | 通訊協定 | 連接埠範圍 | 來源 |
HTTP (80) | TCP (6) | 80 | 0.0.0.0/0 |
HTTP (80) | TCP (6) | 80 | ::/0 |
HTTPS (443) | TCP (6) | 443 | 0.0.0.0/0 |
HTTPS (443) | TCP (6) | 443 | ::/0 |
網路 ACL
預設網路 ACL 允許所有傳入和傳出 IPv4 流量。如果您的使用者透過 IPv6 連線,而 Amazon Virtual Private Cloud (Amazon VPC) 具有關聯的 IPv6 CIDR 區塊,則預設網路 ACL 亦會自動新增規則,允許所有傳入和傳出 IPv6 流量。但是,如果您使用具有限制更嚴格的規則的自訂網路 ACL,則必須明確允許連接埠 80 和 443 上的流量。
網路 ACL 是無狀態的,因此您必須新增傳入和傳出規則,以允許連線到您的網站。如需關於修改網路 ACL 規則的詳細資訊,請參閱使用網路 ACL 控制子網路的流量。
注意: 下列範例顯示允許 TCP 連接埠 80 (HTTP) 和 443 (HTTPS) 上的流量的自訂網路 ACL。網路 ACL 會套用至整個子網路中的所有資源,而不只是單一 EC2 執行個體。在範例組態中,除了目的地連接埠 80 和 443 上的流量之外,相同子網路中資源傳入和傳出的所有流量都會被封鎖。確定您的使用案例是否必須允許其他流量來源 (例如 SSH 或 RDP) 登入執行個體。然後,確保您擁有相關的傳入規則來允許所需的流量。
傳入規則
| | | | | |
---|
規則編號 | 類型 | 通訊協定 | 連接埠範圍 | 來源 | 允許/拒絕 |
100 | HTTP (80) | TCP (6) | 80 | 0.0.0.0/0 | 允許 |
101 | HTTPS (443) | TCP (6) | 443 | 0.0.0.0/0 | 允許 |
102 | HTTP (80) | TCP (6) | 80 | ::/0 | 允許 |
103 | HTTPS (443) | TCP (6) | 443 | ::/0 | 允許 |
* | 所有流量 | 所有 | 所有 | ::/0 | 拒絕 |
* | 所有流量 | 所有 | 所有 | 0.0.0.0/0 | 拒絕 |
傳出規則
| | | | | |
---|
規則編號 | 類型 | 通訊協定 | 連接埠範圍 | 目的地 | 允許/拒絕 |
100 | 自訂 TCP 規則 | TCP (6) | 1024-65535 | 0.0.0.0/0 | 允許 |
101 | 自訂 TCP 規則 | TCP (6) | 1024-65535 | ::/0 | 允許 |
* | 所有流量 | 所有 | 所有 | ::/0 | 拒絕 |
* | 所有流量 | 所有 | 所有 | 0.0.0.0/0 | 拒絕 |
連線遭拒錯誤疑難排解
連線遭拒錯誤表示連線請求會路由至執行個體,但不會從指定連接埠上的服務收到。如果主機 A 向主機 B 啟動 TCP 連線並收到連線遭拒錯誤,則該錯誤表示下列情況:
- 首先,主機 A 將 TCP SYN 封包傳送至主機 B。
- 然後,主機 B 傳送 TCP RST 封包以回覆主機 A。
如果遇到此錯誤,即使在安全群組和網路 ACL 中允許 TCP 連接埠 80 和 443 之後,也可進行下列疑難排解:
- 諸如 httpd (Apache) 之類的服務常駐程式未執行或處於停止狀態。
若要進行疑難排解,請檢查服務在 EC2 執行個體中是否處於執行狀態。
若要進行疑難排解,請檢查 EC2 執行個體是否在所需的 TCP 連接埠 (80/443) 上偵聽。
若要進行疑難排解,請檢查 EC2 執行個體中的作業系統層級防火牆是否封鎖所需連接埠上的傳入 TCP 流量。