Skip to content

為什麼我無法連線到託管在 EC2 執行個體上的網站?

4 分的閱讀內容
0

我無法連線到託管在 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體上的公有網站。

簡短描述

若要解決無法存取的網站問題,請確認您是否正確設定了 EC2 執行個體的網站設定。執行個體上的 Web 伺服器設定不正確,會導致無法存取其上託管的所有網站。

解決方法

確認執行個體是否正在執行,並通過了兩個狀態檢查

請檢查 Amazon EC2 主控台,以確認該執行個體是否正在執行。若要對狀態檢查問題進行疑難排解,請參閱為什麼我的 EC2 Linux 執行個體無法連線且狀態檢查失敗?

此外,請使用執行個體主控台輸出執行個體的螢幕截圖,檢查執行個體是否已正確啟動。

檢查執行個體的安全群組和網路 ACL 組態

確認下列執行個體組態:

確認網站是否具有正確的 DNS 設定

確認您網站的以下 DNS 組態:

確認 Web 伺服器是否正在運行,並且沒有作業系統防火牆阻止對連接埠的存取

若要檢查您的網路連接埠組態和 Web 伺服器,請完成下列步驟:

  1. 使用 SSHSession Manager (AWS Systems Manager 的一項功能) 連線到該執行個體。如果您無法使用 SSH 或 Session Manager 連線至根據 AWS Nitro System建置的執行個體,請使用 EC2 序列主控台

  2. 若要檢查網站是否在本機執行,請從 EC2 執行個體託管網站中執行下列命令:

    curl https://localhost

    - 或 -

    curl http://localhost:443

    **注意:**如果您在使用 curl 時遇到問題,請檢查執行個體的 Web 伺服器和應用程式組態是否有問題。

  3. 若要檢查 Web 伺服器服務狀態,請根據您執行的作業系統 (OS) 執行下列命令。
    Red Hat Enterprise Linux (RHEL)、CentOS、Fedora 與 Amazon Linux:

    sudo systemctl status httpd.service

    輸出範例:

    The Apache HTTP Server
    Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset:
    disabled)
    Active: inactive (dead)

    Debian 和 Ubuntu:

    sudo systemctl status apache2.service

    輸出範例:

    The Apache HTTP Server
    Loaded: loaded (/lib/systemd/system/apache2.service; disabled; vendor
    preset: disabled)
    Active: inactive (dead)

    在命令輸出中,檢查**非作用中 (死亡) **狀態。
    如果您的 Linux 系統執行 System V,請執行下列命令來檢查 Web 伺服器狀態:

    sudo service httpd status

    **注意:**如果您執行的是 Debian 或 Ubuntu,請將 httpd 替換為 apache2
    輸出範例:

    httpd is stopped
  4. 若要啟動 Web 伺服器並將服務設定為在啟動時啟動,請根據您的作業系統執行以下命令:
    RHEL、CentOS、Fedora 和 Amazon Linux:

    sudo systemctl start httpd; sudo systemctl enable httpd

    Debian 或 Ubuntu:

    sudo systemctl start apache2; sudo systemctl enable apache2
  5. 若要確認 Web 伺服器服務是否正在執行並啟動,請根據您的作業系統執行以下命令:
    RHEL、CentOS、Fedora 和 Amazon Linux:

    sudo systemctl status httpd.service

    輸出範例:

    The Apache HTTP ServerLoaded: loaded (/usr/lib/systemd/system/httpd.service;
    enabled; vendor preset: disabled)
    Active: active (running)

    Debian 或 Ubuntu:

    sudo systemctl status apache2.service

    輸出範例:

    The Apache HTTP ServerLoaded: loaded (/lib/systemd/system/apache2.service;
    enabled; vendor preset: enabled)
    Active: active (running)

    若要為在 System V 上執行的系統啟動已停止的 Web 伺服器服務,請執行下列命令:

    sudo service httpd start

    輸出範例:

    Starting httpd:                                            [  OK  ]
  6. 若要確認 Web 伺服器是否正在接聽傳入使用者連線請求,請執行下列命令:

    sudo netstat -tulpn|grep -i :80
    tcp6       0      0 :::80                   :::*                    LISTEN      11993/httpd

    **注意:**執行上述命令兩次。第二次,將 80 替換為 443。Web 伺服器在連接埠 80 上接聽 HTTP 流量,在連接埠 443 上接聽使用 TLS/SSL 加密的流量。
    如果您執行多個介面,請執行下列命令來確認 Web 伺服器是否正在接聽所有 IP 位址:

    cat /etc/httpd/conf/httpd.conf  | grep Listen

    輸出範例:

    Listen *:80
    Listen *:443
  7. 如果您使用作業系統防火牆,請確認它允許連接埠 80 和 443 上的請求。

  8. (選用) 若要確認 iptables 規則是否允許連接埠 80 和 443 上的傳入請求,請執行下列命令:

    sudo iptables -vnL

    輸出範例:

    Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination
       35 10863 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0
        0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

    在上述輸出範例中,規則僅允許網際網路控制訊息通訊協定 (ICMP)、localhost 和連接埠 22/TCP (SSH)。這些規則會封鎖到 TCP 連接埠 80 或 443 的傳入連線。

  9. 若要設定 iptables 規則以允許連接埠 80 和 443 接受傳入 HTTP 和 HTTPS 連線請求,請執行下列命令:

    iptables -I INPUT -p tcp --match multiport --dports 80,443 -j ACCEPT

    輸出範例:

    Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target     prot opt in     out     source               destination
        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 80,443
      486  104K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0
        0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

檢查 AL2023、AL2 和 RHEL 7 及更新版本的組態

對於 Amazon Linux 2023 (AL2023)、Amazon Linux 2 (AL2) 和 RHEL 執行個體,請執行下列命令來檢查 firewalld 服務是否正在執行:

sudo firewall-cmd --state

輸出範例:

running

如果 firewalld 服務正在執行,請執行下列命令以允許 TCP 連接埠 80 和 443 上的連線:

sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload

**注意:**如果您先前新增了規則,則 reload 命令會重新載入服務並使規則生效。

對於每個命令,請確認輸出是否類似於以下範例:

success

檢查 Debian 和 Ubuntu 伺服器的組態

請完成下列步驟:

  1. 若要檢查簡單防火牆 (UFW),請執行以下命令:

    sudo ufw status verbose

    輸出範例:

    Status:  active
  2. 如果您正在執行 UFW,請使用以下命令允許所需 TCP 連接埠上的傳入連線請求:
    TCP 連接埠 80:

    sudo ufw allow in 80/tcp

    TCP 連接埠 443:

    sudo ufw allow 443/tcp
  3. 對於每個命令,請確認輸出是否類似於以下範例:

    Rule added
    Rule added (v6)

若要進一步進行疑難排解,請檢查 /var/log 上的 Web 伺服器存取錯誤日誌以尋找問題。使用以下預設 Web 伺服器日誌位置:

  • 若是 Amazon Linux 和 RHEL,請使用 /var/log/httpd
  • 若是 Debian 和 Ubuntu,請使用 /var/log/apache2

注意: Web 伺服器記錄位置取決於您的伺服器組態。

相關資訊

如何對 EC2 執行個體上託管的網站連線速度緩慢進行疑難排解?

AWS 官方已更新 2 個月前