EC2 인스턴스에서 호스팅되는 웹사이트에 연결할 수 없는 이유는 무엇인가요?

6분 분량
0

내 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 호스팅되는 퍼블릭 웹사이트에 연결할 수 없습니다.

간략한 설명

EC2 인스턴스에서 실행되는 웹사이트는 여러 가지 이유로 연결하지 못할 수 있습니다. 이 문제를 해결하려면, EC2 인스턴스의 구성 설정이 올바른지 확인합니다. 예를 들어, 인스턴스가 올바르게 부팅되지 않거나 올바른 DNS 구성이 없는 경우 해당 인스턴스에서 호스팅되는 웹사이트에 연결할 수 없습니다.

이 문서의 단계를 사용하여 EC2 인스턴스의 구성 설정을 확인하고 이 문제의 근본 원인을 찾습니다.

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하는 경우, 최신 버전의 AWS CLI를 사용하고 있는지 확인하세요.

Linux용 EC2 직렬 콘솔을 사용하여 Nitro 기반 인스턴스 유형 문제 해결

Linux용 EC2 직렬 콘솔 설정을 활성화한 경우, 이를 사용하여 지원되는 Nitro 기반 인스턴스 유형의 문제를 해결할 수 있습니다. 직렬 콘솔 또는 AWS CLI를 사용하여 직렬 콘솔에 액세스할 수 있습니다. EC2 직렬 콘솔을 사용하면 활성화된 연결 없이 인스턴스에 연결할 수 있습니다.

직렬 콘솔을 사용하여 문제를 해결하기 전에 다음 단계를 따릅니다.

  • 계정 수준에서 콘솔에 대한 액세스 권한 부여
  • IAM 사용자에게 액세스 권한을 부여하는 AWS Identity and Access Management(IAM) 정책 생성
  • 인스턴스에 암호 기반 사용자가 한 명 이상 포함되어 있는지 확인

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

인스턴스가 Amazon EC2 콘솔에서 실행 중으로 나열되어 있는지 확인하세요. 인스턴스가 실행되고 있지 않거나 다른 상태 확인 문제가 있는 경우, EC2 Linux 인스턴스에 연결할 수 없고 상태 확인에 실패하는 이유는 무엇인가요?의 단계를 따릅니다.

인스턴스가 올바르게 부팅되는지 확인

인스턴스의 시스템 로그에서 부팅 오류를 확인합니다.

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

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

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

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

웹사이트가 로컬로 실행되고 있는지 확인하려면, EC2 인스턴스 호스팅 웹사이트 내에서 다음 명령을 실행합니다.

curl https://localhost

-또는-

curl http://localhost:443

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

2.    웹 서버 상태를 확인합니다.

  • RHEL 또는 CentOS 시스템의 경우, systemctl status httpd 명령을 사용하여 웹 서버의 상태를 확인합니다. 이 명령은 웹 서버가 비활성 상태라는 정보를 반환합니다.
$ 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)
  • Debian 또는 Ubuntu 시스템의 경우, systemctl status httpd 명령을 사용하여 웹 서버의 상태를 확인합니다. 웹 서버는 포트 80 또는 443에서 수신 중이어야 합니다. 이 명령은 웹 서버가 비활성 상태라는 정보를 반환합니다.
$ sudo systemctl status apache2
apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Active: inactive (dead)

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

  • REHL 또는 CentOS 시스템의 경우.
$ sudo systemctl restart httpd
  • Debian 또는 Ubuntu 시스템의 경우 이 명령을 실행합니다.
$ sudo systemctl restart apache2

4.    웹 서버가 현재 실행 중인지 확인합니다.

  • REHL 또는 CentOS 시스템의 경우 이 명령을 실행합니다.
$ 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
  • Debian 또는 Ubuntu 시스템의 경우 이 명령을 실행합니다.
$ sudo systemctl status apache2
apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Active: active (running)

참고: SystemV를 실행하는 이전 Linux 시스템의 경우, 이 명령을 실행하여 웹 서버 상태를 확인합니다.
Debian 또는 Ubuntu 시스템의 경우, httpdapache2로 바꿔야 합니다.

$ sudo service httpd status
httpd is stopped

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

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

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

  • REHL 또는 CentOS 시스템의 경우 이 명령을 실행합니다.
$ sudo netstat -tulpn | grep httpd
tcp        0      0 :::80                       :::*                        LISTEN      2961/httpd
  • Debian 또는 Ubuntu 시스템의 경우 이 명령을 실행합니다.
$ sudo netstat -tulpn | grep apache2
tcp6       0      0 :::80                   :::*                    LISTEN      2741/apache2

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

참고: 여러 인터페이스가 실행 중인 경우, 다음 명령을 실행하여 웹 서버가 모든 IP에서 수신 중인지 확인하세요.

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

다음은 성공적인 출력의 예시입니다.

Listen *:80

-또는-

Listen *: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 2023, 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

관련 정보

EC2 인스턴스에 호스팅되는 웹사이트에 대한 느린 연결 속도 문제를 해결하려면 어떻게 해야 하나요?

AWS 공식
AWS 공식업데이트됨 2년 전