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 인스턴스를 재부팅하려고 시도하면 “Kenel panic” 오류가 표시됩니다. 어떻게 해결할 수 있나요?
- 기타 운영 체제 오류가 있는 경우 EC2 Linux 인스턴스가 운영 체제 문제로 인해 인스턴스 상태 확인에 실패했습니다. 이 문제를 해결하려면 어떻게 해야 합니까?
인스턴스의 보안 그룹 및 네트워크 ACL 구성 확인
- 인스턴스의 연결된 보안 그룹과 네트워크 ACL이 포트 80 및 443에서 트래픽을 허용하는지 확인합니다.
- 인스턴스 서브넷의 라우팅 테이블에 인터넷 게이트웨이에 대한 기본 경로가 있는지 확인합니다.
인스턴스의 DNS 구성이 올바른지 확인
- 웹 사이트에서 Route 53 DNS 서비스를 사용하는 경우 DNS 레코드를 올바르게 구성했는지 확인합니다.
- 인스턴스에 탄력적 IP 주소가 할당되어 있는지 확인합니다. 인스턴스를 중지하고 시작하면 탄력적 IP 주소가 인스턴스와 연결된 상태로 유지됩니다.
- 퍼블릭 IP 주소 또는 탄력적 IP 주소를 A-레코드에 매핑해야 합니다.
웹 서버가 실행 중이고 OS 수준에서 포트 액세스를 차단하는 방화벽이 없는지 확인
네트워크 포트는 다양한 서비스가 요청을 보내는 통신 엔드포인트입니다. 이러한 요청에는 사용자의 웹 사이트 연결 요청이 포함됩니다. 웹 서버는 포트 80에서 HTTP 트래픽을 수신하고 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 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
관련 정보
관련 콘텐츠
- 질문됨 3달 전lg...
- 질문됨 2달 전lg...
- 질문됨 4달 전lg...
- AWS 공식업데이트됨 일 년 전
- AWS 공식업데이트됨 2년 전
- AWS 공식업데이트됨 8달 전
- AWS 공식업데이트됨 일 년 전