블로그 이름

[HTTP] 서버로부터 응답이 오지 않을 때, 체크 리스트 본문

개발/기타

[HTTP] 서버로부터 응답이 오지 않을 때, 체크 리스트

Hide 2024. 10. 6. 18:32

 내 로컬 PC (IP : 1.2.3.4)에서, 서버로 요청을 보냈을 때, (IP: 5.6.7.8)로 HTTP 요청을 보냈을 때, 페이지가 정상 동작하지 않는다면 어떤 순서로 점검해봐야 하는지에 대해 알고 싶어서 찾아보았다.

 

 

웹 페이지 요청이 정상적으로 이루어지지 않을 때, 점검해야 할 사항과 해결 방법을 순서대로 적는다.

 

 

1. 네트워크 연결 상태 점검

- 로컬 PC의 네트워크 연결 확인 : 로컬PC가 인터넷에 정상적으로 연결되어 있는지 확인한다. 명령 프롬프트에서 ping 5.6.7.8 을 실행하여 서버에 도달할 수 있는지 확인한다. 응답이 없다면, 네트워크 경로에 문제가 있을 수 있다.

- 서버 네트워크 상태 확인 : 5.6.7.8 서버가 네트워크에 정상적으로 연결되어 있는지 확인해야 한다 서버 측에서 방화벽이나 네트워크 설정에 문제가 있을 수 있다.

 

 

2. 방화벽 및 포트 설정 확인

- 로컬PC 방화벽 : 로컬 PC의 방화벽에서 웹페이지 요청을 차단하고 있는지 확인한다.

- 서버 방화벽 : 서버쪽에서 외부 요청을 차단하고 있을 수 있다. iptables, ufw 또는 클라우드 서비스의 보안 그룹 설정에서 80번 포트(HTTP) 또는 443번 포트 (HTTPS)가 열려 있는지 확인한다.

 

 

3. 서버 응답 여부 확인

- 웹 서버 작동 여부 : 서버에서 웹 서버가 정상적으로 실행중인지 확인한다. Apache, Nginx  등 웹 서버가 실행 중인지, 설정 파일에 오류가 없는지 확인한다. systemctl status apache2 또는 nginx 명령어를 사용한다.

- 페이지 상태 코드 확인 : curl -I http://5.6.7.8 명령어를 통해 서버가 정상적인 상태 코드를 반환하는지 확인한다. 예를 들어, 404 오류는 파일을 찾지 못했다는 뜻이고, 500 오류는 서버 자체의 문제인 것이다.

 

 

4. DNS 설정 점검

- DNS 확인 : 만약 도메인을 통해 서버에 접속하려고 했다면, 해당 도메인이 올바른 IP 주소(5.6.7.8)로 해석되고 있는지 확인해야 한다. 이를 위해 nslookup <도메인> 또는 dig <도메인> 명령어를 쓸 수 있다.

 

 

5. 라우팅 테이블 점검

- 라우터 설정 : 로컬 PC에서 서버까지 가는 경로에 문제가 있는지 확인한다. 네트워크 라우터 또는 스위치의 설정에 문제가 있거나, 서브넷 간의 통신이 제대로 이루어지지 않을 수 있다. 

- 트레이스 경로 확인 : tracert 5.6.7.8 (리눅스 : traceroute 5.6.7.8 ) 명령어로 패킷이 서버까지 가는 경로를 확인하고, 경로 중간에 문제 구간이 있는지 확인한다.

 

 

6. 웹 브라우저 캐시 확인

- 브라우저 문제 확인 : 브라우저 캐시로 인해 문제가 발생할 수 있으므로, 캐시를 지우고 다시 시도한다. 또는 다른 브라우저로 시도해본다.

 

 

이 때, 도메인으로 접근하는 경우 (서버의 ip를 모르는 경우, 서버에 접근 할 수 없는 경우) 의 경우에 로컬PC에서 점검할 수 있는 방법이 있는지 찾아보았다. 서버의 문제인지, 내 PC가 문제인지를 확인할 때 사용하는 방법이다.

 

도메인은 예시로 test.com 이라고 하겠다.

 

 

1. DNS 문제 확인

test.com 도메인으로 IP주소를 제대로 해석했는지 확인해야한다. 도메인이 올바른 IP로 변환되었는지 확인하는 방법은 아래와 같다.

- nslookup test.com

- 이 명령어는 DNS 서버가 test.com을 어떤 IP 주소로 변환하는지 확인하는 명령어이다. 여기서 IP 주소가 제대로 반환되지 않거나, 다른 IP가 나온다면 DNS 문제가 있을 수 있다. 

해결방법 : DNS 캐시를 지우거나, 다른 DNS 서버를 사용하여 (Google DNS : 8.8.8.8) 해결할 수 있다.

DNS 캐시 삭제하는 명령어 : 윈도우 : ipconfig /flushdns, 리눅스 :  sudo systemd-resolve --flush-caches

 

 

2. 네트워크 연결 상태 확인

로컬 PC에서 해당 서버 IP로의 연결ㅊ이 가능한지 확인해야 한다. 1에서 도메인을 통해 IP를 알아냈다면 해당 IP로 ping 테스트를 하면 된다. ping 명령어로 해당 IP 주소에 네트워크적으로 접근이 가능한지 확인한다. 응답이 없으면 네트워크 경로에 문제가 있을 수 있다. ping이 안되는 경우 네트워크 경로(라우터 설정, 게이트웨이 등) 에 문제가 있거나,  서버가 네트워크적으로 차단된 상태일 수 있다. 방화벽이 ICMP(ping)을 차단할 가능성도 있다. 이 경우 트레이스 경로를 확인해야 한다.

 

 

3. 트레이스 경로 확인

요청이 서버까지 가는 경로에서 문제가 발생할 수 있으므로, 경로를 추적하는 명령어로 확인한다. 아까 사용했던 tracert test.com  명령어이다. 패킷이 서버까지 가는 중간 경로를 확인하여 특정 네트워크 구간에서 패킷이 멈추는 경우, 그 구간의 네트워크 문제가 있을 가능성이 크다. 이는 ISP(인터넷 서비스 제공자) 문제일 수도 있다.

 

 

4. 포트 연결 확인 (HTTP/HTTPS)

도메인이 올바르게 해석되고, 네트워크 연결도 문제가 없을 때는 웹 서버로의 연결이 가능한지 확인해야 한다. 웹 페이지는 HTTP(80번포트) 또는 HTTPS(443번 포트)를 통해 접속하므로 포트가 열려있는지 확인한다. 만약 연결에 실패한다면 서버의 방화벽 설정이나 포트가 막혀있을 수 있다. telnet test.com 80 또는 telnet test.com 443이 안된다면, telnet 이 없을 경우 curl -I http://test.com 명령어로 서버가 응답을 주는지 알 수 있다. 정상 응답이 안오면 서버의 웹서버가 작동하지 않거나 방화벽에서 요청을 차단하고 있는 것이다.

 

 

5. 로컬 PC의 네트워크 및 브라우저 문제 확인

로컬PC 자체에 네트워크 문제나 브라우저 설정 문제로 인해 웹페이지에 접속하지 못할 수 있다. 다른 웹사이트에 접속하여 (구글이나 네이버 등) 접속이 가능한지 확인하여, 다른 사이트 접속도 되지 않는다면 로컬PC의 설정에 문제가 있을 수 있다.

- 브라우저 캐시 및 쿠키 삭제 : 캐시 문제일 수 있으므로 브라우저 캐시를 삭제하거나 브라우저를 리셋한 후 다시 시도한다. 

- 다른 브라우저 사용 : 크롬, 파이어폭스 등 다른 브라우저에서 재시도 해본다.

 

 

[정리]

1. DNS 문제 : nslookup으로 IP가 제대로 해석되는지 확인.

2. 네트워크 연결 문제 : ping으로 서버 IP에 도달할 수 있는지 확인.

3. 경로 문제 : tracert로 패킷이 중간에 어디서 멈추는지 확인.

4. 포트 연결 문제 : telnet으로 80 또는 443 포트가 열려있는지 확인.

5. PC 자체 문제 : 다른 사이트 접속 테스트, 브라우저 캐시 삭제.

 

만약 위 과정(DNS, 네트워크 연결, 포트 확인 등) 모든 점검과정이 문제 없는데도 불구하고 HTTP 응답이 오지 않는다면 서버 자체나 웹 서버 관련 문제일 가능성이 높다.

 

웹 서버가 꺼져있는지는 systemctl status apache2 로 웹 서버가 실행중인지 확인할 수 있다.

 

또는 웹 서버 설정 문제일수도 있다. 웹 서버가 켜져 있지만 설정 파일에 오류가 이ㅆ거나, 가상 호스트 설정이 잘못되어 있는 경우 페이지를 제대로 제공하지 못할 수 있다.  잘못된 경로나 권한 설정이 되어있는지, 에러 로그를 확인하여 (/var/log/apache2/error.log) 에서 에러 로그를 확인할 수 있다.

 

또는, 서버의 자원이 부족해서 응답을 못 할 수 있다. 서버가 켜져 있고, 웹 서버도 실행 중이지만, 서버 자원(CPU, 메모리, 디스크) 등이 부족하여 HTTP 요청을 처리하지 못하는 상황일 수 있다. 과부하 상태에서는 응답이 늦어지거나, 응답을 못 할 수 있다. (top 명령어로 cpu, 메모리 사용률을 확인해야 한다.)

 

 

 

오늘은 서버에 HTTP 요청을 보냈을 때, 응답이 오지 않는 경우 어느 부분을 확인해야 하는지 알아보았다. 

모든 네트워크와 연결 문제를 확인하였는데도 HTTP 응답이 오지 않는다면 서버 내부 문제가 원인일 가능성이 높다.