EC2 인스턴스에서 호스팅되는 웹사이트에 연결할 수 없는 이유는 무엇인가요?
내 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 인스턴스에 연결할 수 없고 상태 확인에 실패하는 이유는 무엇인가요?의 단계를 따릅니다.
인스턴스가 올바르게 부팅되는지 확인
인스턴스의 시스템 로그에서 부팅 오류를 확인합니다.
- 커널 패닉 오류가 표시되는 경우, 커널을 업그레이드하거나 EC2 Linux 인스턴스를 재부팅한 후 ‘커널 패닉’ 오류가 표시되는 이유는 무엇인가요?를 참조하세요.
- 기타 운영 체제 오류의 경우, 운영 체제 문제로 인해 인스턴스 상태 확인에 실패한 EC2 Linux 인스턴스 문제를 해결하려면 어떻게 해야 하나요?를 참조하세요.
인스턴스의 보안 그룹 및 네트워크 ACL 구성 확인
- 인스턴스의 연결된 보안 그룹과 네트워크 ACL이 포트 80 및 443에서의 트래픽을 허용하는지 확인합니다.
- 인스턴스 서브넷의 라우팅 테이블에 인터넷 게이트웨이에 대한 기본 경로가 있는지 확인합니다.
인스턴스의 DNS 구성이 올바른지 확인
- 웹사이트에서 Route 53 DNS 서비스를 사용하는 경우, DNS 레코드를 올바르게 구성했는지 확인합니다.
- 인스턴스에 탄력적 IP 주소가 할당되었는지 확인합니다. 인스턴스를 중지했다가 시작해도 탄력적 IP 주소는 여전히 인스턴스와 연결되어 있습니다.
- 퍼블릭 IP 주소 또는 탄력적 IP 주소를 A 레코드에 매핑해야 합니다.
웹 서버가 실행 중이고 포트 액세스를 차단하는 OS 수준 방화벽이 없는지 확인
네트워크 포트는 다양한 서비스가 요청을 보내는 통신 엔드포인트입니다. 이러한 요청에는 사용자의 웹사이트 연결 요청이 포함됩니다. 웹 서버는 HTTP 트래픽을 포트 80에서 수신하고 TLS/SSL로 암호화된 트래픽을 위해 포트 443을 사용합니다. 웹 서버가 실행되고 있지 않거나 방화벽이 이러한 포트를 차단하는 경우, 사용자는 웹사이트에 연결할 수 없습니다.
웹사이트가 로컬로 실행되고 있는지 확인하려면, EC2 인스턴스 호스팅 웹사이트 내에서 다음 명령을 실행합니다.
curl https://localhost
-또는-
curl http://localhost:443
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 시스템의 경우, httpd를 apache2로 바꿔야 합니다.
$ 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
관련 정보
관련 콘텐츠
- 질문됨 6달 전lg...
- 질문됨 2달 전lg...
- 질문됨 일 년 전lg...
- AWS 공식업데이트됨 2년 전
- AWS 공식업데이트됨 2년 전
- AWS 공식업데이트됨 2년 전