EC2 인스턴스에서 호스팅되는 응답하지 않는 웹 사이트 문제를 해결하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2020년 12월 7일

Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 호스팅되는 퍼블릭 웹 사이트에 연결할 수 없습니다. 문제를 해결하려면 어떻게 해야 하나요?

간략한 설명

EC2 인스턴스에서 실행되는 웹 사이트에 여러 가지 이유로 연결할 수 없게 될 수 있습니다. 인스턴스의 구성 설정이 올바른지 확인하려면 다음을 점검하십시오.

  • 인스턴스가 실행 중이고 두 상태 검사를 모두 통과하는지 확인합니다.
  • 인스턴스가 제대로 부팅되는지 확인합니다.
  • 인스턴스의 보안 그룹 및 네트워크 ACL(액세스 제어 목록) 구성을 확인합니다.
  • 인스턴스의 DNS 구성이 올바른지 확인합니다.
  • 웹 서버가 실행 중이고 포트 액세스를 차단하는 OS 수준 방화벽이 없는지 확인합니다.

해결 방법

인스턴스가 실행 중이고 두 상태 검사를 모두 통과하는지 확인

인스턴스가 Amazon EC2 콘솔에서 실행 중으로 나열되는지 확인합니다.

상태 검사 문제 해결에 대한 자세한 내용은 EC2 Linux 인스턴스에 연결할 수 없고 상태 확인 중 하나 또는 둘 다 실패하는 이유는 무엇입니까?를 참조하세요.

인스턴스가 제대로 부팅되는지 확인

인스턴스의 보안 그룹 및 네트워크 ACL 구성 확인

인스턴스의 DNS 구성이 올바른지 확인

웹 서버가 실행 중이고 포트 액세스를 차단하는 OS 수준 방화벽이 없는지 확인

네트워크 포트는 다양한 서비스가 요청을 보내는 통신 엔드포인트입니다. 이러한 요청에는 사용자의 웹 사이트 연결 요청이 포함됩니다. 웹 서버는 일반적으로 포트 80에서 HTTP 트래픽을 수신하고 TLS/SSL로 암호화된 트래픽에 포트 443을 사용합니다. 웹 서버가 실행되고 있지 않거나 방화벽이 이러한 포트를 차단하면 사용자가 웹 사이트에 연결할 수 없습니다.

1.    SSH를 통해 인스턴스에 원격으로 연결합니다.

2.    systemctl status httpd 명령을 실행하여 웹 서버의 상태를 확인합니다. 웹 서버가 포트 80 또는 포트 443에서 수신하고 있어야 합니다. 다음 예제에서 이 명령은 웹 서버가 비활성 상태라는 정보를 반환합니다.

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

3.    웹 서버를 다시 시작하려면 다음 명령을 실행합니다.

$ sudo systemctl restart  httpd

4.    다음 명령을 실행하여 웹 서버가 현재 실행 중인지 확인합니다.

$ sudo systemctl status httpd
 httpd.service - The Apache HTTP Server
 Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
 Active: active (running) since Thu 2020-11-19 14:40:15 UTC; 42s ago

참고: SystemV를 실행하는 이전 Linux 시스템의 경우 다음 명령을 사용하여 웹 서버 상태를 확인하세요.

$ sudo service httpd status
httpd is stopped

SystemV에서 중지된 웹 서버를 다시 시작하려면 다음 명령을 사용합니다.

$ sudo service httpd restart
Stopping httpd:                                            [FAILED]
Starting httpd:                                            [  OK  ]

5.    다음 명령을 실행하여 웹 서버가 사용자의 수신 연결 요청을 포트 80 또는 443에서 수신하고 있는지 확인합니다.

$ sudo netstat -tulpn | grep httpd
tcp        0      0 :::80                       :::*                        LISTEN      2961/httpd

6.    OS 수준 방화벽의 상태를 확인합니다. 활성 방화벽이 있는 경우 포트 80 및 443에서 요청을 허용하는지 확인합니다.

Amazon Linux, CentOS, RHEL:

1.    다음 명령을 실행하여 iptables 규칙이 포트 80 및 443에서 수신 요청을 차단하는지 확인합니다.

$ sudo iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

2.    다음 명령을 실행하여 포트 80에서 수신 HTTP 연결 요청을 수락하도록 허용합니다.

$ sudo iptables -A INPUT -p tcp --dport 80 --syn -m conntrack --ctstate NEW -j ACCEPT

3.    포트 443에서 수신 HTTPS 연결 요청을 수락하도록 허용하려면 다음 명령을 실행합니다.

$ sudo iptables -A INPUT -p tcp --dport 443 --syn -m conntrack --ctstate NEW -j ACCEPT

Amazon Linux 2 및 RHEL 7 이상:

1.    다음 명령을 실행하여 firewalld가 실행 중인지 확인합니다.

$ sudo firewall-cmd --state
running

2.    firewalld가 실행 중인 경우 다음 명령을 실행하여 포트 80 및 443에서 연결을 허용하도록 구성합니다. 다음 예제의 마지막 명령은 새 규칙이 적용되도록 서비스를 다시 로드합니다.

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

Debian 및 Ubuntu 서버:

1.    다음 명령을 실행하여 UFW 방화벽을 확인합니다.

$ sudo ufw status verbose
Status: active

2.    UFW가 실행 중인 경우 다음 명령을 사용하여 포트 80 및 포트 443에서 수신 연결 요청을 허용합니다.

$ sudo ufw allow in 80/tcp
Rule added
Rule added (v6)
$ sudo ufw allow 443/tcp
Rule added
Rule added (v6)

웹 서버 액세스 오류 로그에서 문제를 확인합니다. 웹 서버 로그는 일반적으로 /var/log에 있습니다. 이 위치는 서버 구성에 따라 변경될 수 있습니다. 다음은 기본 웹 서버 로그 위치입니다.

  • Amazon Linux 및 RHEL: /var/log/httpd
  • Debian 및 Ubuntu: /var/log/apache2