EC2 인스턴스에서 호스팅되는 웹 사이트에 연결할 수 없는 이유는 무엇입니까?
내 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 호스팅되는 퍼블릭 웹 사이트에 연결할 수 없습니다.
간략한 설명
연결할 수 없는 웹 사이트 문제를 해결하려면 EC2 인스턴스의 웹 사이트 구성을 올바르게 구성했는지 확인하십시오. 인스턴스의 웹 서버 설정이 올바르지 않으면 인스턴스에서 호스팅되는 모든 웹 사이트에 대한 액세스가 차단됩니다.
해결 방법
인스턴스가 실행 중이고 두 상태 검사를 모두 통과했는지 확인
Amazon EC2 콘솔에서 인스턴스가 실행 중인지 확인합니다. 상태 확인 문제를 해결하려면 EC2 Linux 인스턴스에 연결할 수 없고 상태 확인에 실패하는 이유는 무엇입니까?를 참조하십시오.
또한 인스턴스 콘솔 출력과 인스턴스 스크린샷을 사용하여 인스턴스가 제대로 부팅되는지 확인합니다.
인스턴스의 보안 그룹 및 네트워크 ACL 구성 확인
다음 인스턴스 구성을 확인하십시오.
- 연결된 보안 그룹 및 네트워크 액세스 제어 목록(네트워크 ACL)이 포트 80 및 443에서의 트래픽을 허용합니다.
- 인스턴스 서브넷의 라우팅 테이블에 인터넷 게이트웨이에 대한 기본 경로가 있습니다.
웹 사이트의 DNS 구성이 올바른지 확인
웹 사이트의 다음 DNS 구성을 확인하십시오.
- 웹 사이트에서 Amazon Route 53 DNS 서비스를 사용하는 경우 DNS 레코드를 올바르게 구성한 것입니다.
- 인스턴스에 탄력적 IP 주소를 할당했습니다.
참고: 인스턴스를 중지했다가 시작하더라도 탄력적 IP 주소는 인스턴스와 연결된 상태로 유지됩니다. - 퍼블릭 IP 주소 또는 탄력적 IP 주소를 A 레코드에 매핑했습니다.
웹 서버가 실행 중이고 포트 액세스를 차단하는 OS 방화벽이 없는지 확인
네트워크 포트 구성과 웹 서버를 확인하려면 다음 단계를 완료하십시오.
-
AWS Systems Manager의 기능인 SSH 또는 Session Manager를 사용하여 인스턴스에 연결합니다. SSH 또는 Session Manager를 사용하여 AWS Nitro System에서 구축한 인스턴스에 연결할 수 없는 경우 EC2 직렬 콘솔을 사용하십시오.
-
웹 사이트가 로컬로 실행되고 있는지 확인하려면 EC2 인스턴스 호스트 웹 사이트 내에서 다음 명령을 실행합니다.
curl https://localhost
-또는-
curl http://localhost:443
참고: curl을 사용할 때 문제가 발생하는 경우 인스턴스의 웹 서버 및 애플리케이션 구성에 문제가 있는지 확인하십시오.
-
웹 서버 서비스 상태를 확인하려면 실행하는 운영 체제(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)
명령 출력에서 inactive (dead) 상태를 확인합니다.
Linux 시스템에서 System V를 실행하는 경우 다음 명령을 실행하여 웹 서버 상태를 확인합니다.sudo service httpd status
참고: Debian 또는 Ubuntu를 실행하는 경우 httpd를 apache2로 바꾸십시오.
출력 예시:httpd is stopped
-
웹 서버를 시작하고 부팅 시 시작하도록 서비스를 설정하려면 OS에 따라 다음 명령을 실행합니다.
RHEL, CentOS, Fedora 및 Amazon Linux:sudo systemctl start httpd; sudo systemctl enable httpd
Debian 또는 Ubuntu:
sudo systemctl start apache2; sudo systemctl enable apache2
-
웹 서버 서비스가 실행 중이고 활성화되었는지 확인하려면 OS에 따라 다음 명령을 실행합니다.
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에서 실행되는 시스템의 경우 중지된 웹 서버 서비스를 시작하려면 다음 명령을 실행합니다.
sudo service httpd start
출력 예시:
Starting httpd: [ OK ]
-
웹 서버가 인바운드 사용자 연결 요청을 수신하고 있는지 확인하려면 다음 명령을 실행합니다.
sudo netstat -tulpn|grep -i :80 tcp6 0 0 :::80 :::* LISTEN 11993/httpd
참고: 위 명령을 두 번 실행합니다. 두 번째 실행 시 80을 443으로 바꾸십시오. 웹 서버는 HTTP 트래픽을 포트 80에서 수신하고 TLS/SSL로 암호화된 트래픽을 포트 443에서 수신합니다.
여러 인터페이스를 실행하는 경우 다음 명령을 실행하여 웹 서버가 모든 IP 주소에서 수신 중인지 확인합니다.cat /etc/httpd/conf/httpd.conf | grep Listen
출력 예시:
Listen *:80
Listen *:443
-
OS 방화벽을 사용하는 경우 포트 80 및 443에서 요청을 허용하는지 확인합니다.
-
(선택 사항) 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에 대한 인바운드 연결을 차단합니다.
-
포트 80 및 443이 인바운드 HTTP 및 HTTPS 연결 요청을 수락하도록 iptables 규칙을 구성하려면 다음 명령을 실행합니다.
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 서버의 구성 확인
다음 단계를 완료하십시오.
-
UFW(Uncomplicated Firewall)가 있는지 확인하려면 다음 명령을 실행합니다.
sudo ufw status verbose
출력 예시:
Status: active
-
UFW를 실행하는 경우 다음 명령을 사용하여 필요한 TCP 포트에서 인바운드 연결 요청을 허용합니다.
TCP 포트 80:sudo ufw allow in 80/tcp
TCP 포트 443:
sudo ufw allow 443/tcp
-
명령마다 출력이 다음 예와 유사한지 확인합니다.
Rule added Rule added (v6)
문제를 추가로 해결하려면 /var/log에서 웹 서버 액세스 오류 로그에 문제가 있는지 확인하십시오. 다음과 같은 기본 웹 서버 로그 위치를 사용하십시오.
- Amazon Linux 및 RHEL의 경우 /var/log/httpd를 사용합니다.
- Debian 및 Ubuntu의 경우 /var/log/apache2를 사용합니다.
참고: 웹 서버 로그 위치는 서버 구성에 따라 다릅니다.
관련 정보
관련 콘텐츠
- 질문됨 일 년 전
- 질문됨 일 년 전
- 질문됨 6달 전
- 질문됨 일 년 전