사이트가 열리지 않을 때
회사 사이트가 갑자기 열리지 않을 때 도메인 만료, DNS, 서버, 인증서 네 가지 원인을 순서대로 갈라내는 진단 절차입니다. 대시보드에서 볼 것, dig와 curl로 확인할 것, 캐시를 비우는 방법까지 정리했습니다.
작성
사이트가 열리지 않을 때 가장 먼저 할 일은 도메인이 살아 있는지 확인하는 것입니다. 대시보드 도메인 목록에서 해당 도메인의 상태 라벨과 만료일을 보고, 이어서 dig A example.co.kr +short 한 줄로 이름이 IP를 돌려주는지 확인하면 원인이 네 갈래 중 어디인지 거의 갈립니다. 이름이 아예 안 풀리면 도메인이나 DNS 쪽이고, IP는 나오는데 연결이 안 되면 서버 쪽, 연결은 되는데 경고가 뜨면 인증서 쪽입니다.
아래 순서는 앞 단계가 통과해야 다음 단계가 의미 있게 배치되어 있습니다. 중간을 건너뛰면 엉뚱한 곳을 고치게 되므로 순서대로 진행하세요.
먼저 원인을 네 갈래로 나눕니다
| 확인 결과 | 가장 가까운 원인 | 이어서 볼 곳 |
|---|---|---|
| 대시보드 상태가 활성이 아니다 | 도메인 만료, 정지, 삭제 대기 | 만료일과 상태 라벨 |
dig A 가 빈 값이거나 NXDOMAIN | 네임서버 위임 또는 레코드 문제 | WHOIS 의 네임서버, 권한 서버 질의 |
| IP는 나오는데 연결이 안 된다 | 서버 중단, 방화벽, 포트 차단 | 서버 IP 직접 요청 |
| 연결은 되는데 경고 화면이 뜬다 | 인증서 만료, 이름 불일치, 체인 | 인증서 점검 |
| 나만 안 되고 남은 된다 | 사내 리졸버나 로컬 캐시 | 다른 네트워크에서 재확인 |
- 가장 빠른 한 줄
- dig A example.co.kr +short
- 대시보드
- https://app.leto.kr 도메인 목록의 상태와 만료일
- 위임 확인
- WHOIS 조회의 네임서버 항목
- 서버 분리
- curl 의 --resolve 로 IP 직접 지정
순서대로 확인하기
도메인 상태와 만료일을 봅니다
https://app.leto.kr 에 로그인해 도메인 목록을 엽니다. 목록의 상태 컬럼에 활성, 이전 처리 중, 삭제 대기, 정지됨, 삭제됨, 확인 필요 같은 라벨이 표시되고 만료일 컬럼과 남은 일수도 같이 보입니다. 상태가 활성이 아니면 DNS나 서버를 보기 전에 그 문제를 먼저 풀어야 합니다.
만료가 원인이면 상세 화면의 연장하기 버튼이나 비로그인 연장으로 즉시 갱신합니다. 만료일이 이미 지났다면 유예와 복구 기간에서 현재 어느 단계인지 확인하세요. 상태가 정지됨 또는 확인 필요 라면 도메인이 정지되었을 때로 갑니다.
네임서버 위임이 정상인지 봅니다
A 레코드를 권한 서버와 공개 리졸버 양쪽에서 확인합니다
권한 네임서버가 답하는 값과 공개 리졸버가 답하는 값을 비교하면 "아직 안 퍼진 것"과 "애초에 없는 것"을 구분할 수 있습니다.
# 권한 네임서버에 직접 질의 dig @ns1.example-dns.com A example.co.kr +noall +answer # 공개 리졸버가 지금 답하는 값 dig @1.1.1.1 A example.co.kr +short dig @8.8.8.8 A example.co.kr +short권한 서버에 값이 없다면 레코드를 넣지 않았거나 지운 것입니다. 권한 서버에는 있고 공개 리졸버에만 없다면 전파 중이므로 DNS 변경이 반영되지 않을 때를 보세요.
www만 안 열리는 경우도 흔하므로www.example.co.kr도 따로 질의합니다.서버 IP로 직접 요청해 봅니다
이름이 정상적으로 IP를 돌려주면 이제 서버 차례입니다. DNS를 건너뛰고 IP를 직접 지정해서 응답이 오는지 봅니다.
# 지금 연결되는 IP와 응답 코드 curl -sS -o /dev/null -w 'code=%{http_code} ip=%{remote_ip}\n' https://example.co.kr # DNS 를 무시하고 특정 서버 IP 로 직접 요청 curl -sS -o /dev/null -w 'code=%{http_code}\n' \ --resolve example.co.kr:443:203.0.113.10 https://example.co.kr # 포트가 열려 있는지만 확인 nc -vz 203.0.113.10 443 nc -vz 203.0.113.10 80IP로 직접 요청했을 때 응답이 오면 DNS나 앞단 설정 문제이고, 그때도 응답이 없으면 서버나 방화벽 문제입니다. 호스팅 상품이라면 대시보드의 호스팅 관리에서 상태가 활성인지, 디스크 사용량이 한도에 닿지 않았는지 확인하세요.
인증서를 확인합니다
연결은 되는데 브라우저가 경고 화면을 띄우면 인증서 문제입니다.
openssl s_client -connect example.co.kr:443 -servername example.co.kr </dev/null 2>/dev/null \ | openssl x509 -noout -subject -dates -ext subjectAltNamenotAfter날짜가 지났거나subjectAltName목록에 실제 접속 이름이 없으면 그것이 원인입니다. 오류 종류별 대처는 SSL 인증서 오류가 뜰 때에 정리했습니다.
나만 안 되는가, 모두 안 되는가
여기서 갈라야 고칠 대상이 정해집니다. 모두 안 되는 상황에서 내 PC 캐시를 비우는 것은 시간 낭비이고, 반대로 나만 안 되는데 서버를 재시작하면 멀쩡한 서비스를 흔들게 됩니다.
- 휴대폰에서 와이파이를 끄고 모바일 데이터로 같은 주소를 열어 본다
- dig @1.1.1.1 과 dig @8.8.8.8 결과가 사내 리졸버 결과와 같은지 비교한다
- 다른 지역, 다른 회선에 있는 동료에게 접속을 부탁한다
- 시크릿 창과 다른 브라우저로 열어 본다
- 사내 보안 장비나 프록시의 차단 목록을 확인한다
나만 안 되는 경우라면 캐시를 비웁니다. 리졸버와 OS, 브라우저가 각각 따로 캐시를 들고 있으므로 순서대로 비워야 합니다.
# macOS
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
# Windows (명령 프롬프트, 관리자)
ipconfig /flushdns
# Linux (systemd-resolved)
sudo resolvectl flush-caches
브라우저는 자체 DNS 캐시와 HSTS 목록을 따로 들고 있습니다. 크롬에서는 주소창에 chrome://net-internals/#dns 를 열어 캐시를 비우고, 과거에 HTTPS로 접속한 적이 있는 도메인이 HSTS 때문에 계속 HTTPS로 강제 전환된다면 chrome://net-internals/#hsts 에서 해당 도메인을 삭제합니다.
증상별로 가장 흔한 원인
| 브라우저 증상 | 가장 흔한 원인 | 대처 |
|---|---|---|
| 이 사이트에 연결할 수 없음, NXDOMAIN | 도메인 만료, 네임서버 미설정, A 레코드 없음 | 상태와 만료일 확인 후 위임과 레코드 점검 |
| 연결 시간 초과 | 서버 중단, 보안그룹이나 방화벽 차단 | IP로 직접 요청, 포트 개방 확인 |
| 502 또는 503 | 앞단은 살아 있고 애플리케이션이 죽음 | 웹 서버 로그와 프로세스 상태 확인 |
| 404 만 계속 표시 | 가상 호스트 설정에 도메인이 없음 | 서버 설정의 도메인 이름과 문서 루트 확인 |
| 이전 사이트나 공백 페이지 | 옛 값이 캐시에 남음, 옛 서버가 아직 응답 | 권한 서버 값 확인 후 캐시 만료 대기 |
| 인증서 경고 | 만료, 이름 불일치, 중간 인증서 누락 | 인증서 점검 후 재발급 또는 체인 보완 |
장애 원인이 레토 측 서비스로 의심되면 공지사항에 점검이나 장애 안내가 올라와 있는지도 함께 확인하세요.
그래도 해결되지 않으면
위 단계를 모두 지나도 원인이 잡히지 않으면 다음 내용을 정리해서 문의로 보내 주세요. 같은 확인을 반복하지 않아도 되므로 처리가 빨라집니다.
- 도메인 이름과 대시보드에 보이는 상태 라벨, 만료일
- 언제부터 안 되는지, 그 직전에 무엇을 바꿨는지
- dig NS 와 dig A 의 실제 출력 (권한 서버와 공개 리졸버 양쪽)
- curl 요청의 응답 코드와 접속된 IP
- 브라우저에 뜨는 오류 코드 전문과 화면 캡처
- 나만 안 되는지 모두 안 되는지 확인한 결과
자주 묻는 질문
대략적인 방향은 알 수 있습니다. DNS_PROBE_FINISHED_NXDOMAIN 은 이름 자체가 없다는 뜻이라 만료나 네임서버 쪽이고, ERR_CONNECTION_TIMED_OUT 은 이름은 찾았지만 서버가 답하지 않는다는 뜻입니다. 다만 문구는 브라우저마다 다르고 중간 장비가 바꿔 놓기도 하므로 dig 와 curl 결과로 다시 확인해야 합니다.
사내 리졸버나 내 PC의 캐시, 브라우저 캐시, 보안 장비의 차단 중 하나입니다. 모바일 데이터로 바꿔서 열어 보고 열리면 회사 네트워크 문제로 좁혀집니다. OS 의 DNS 캐시를 비우고 시크릿 창으로 다시 확인해 보세요.
대부분 만료 직후부터 네임서버 응답이 끊기거나 안내 페이지로 바뀝니다. 만료 뒤에도 일정 기간은 갱신해서 되살릴 수 있지만 기간이 지나면 복구 절차가 따로 필요해지고 비용도 달라집니다. 자세한 단계는 유예와 복구 기간 가이드를 참고하세요.
있습니다. 서버에 SSH 는 되는데 웹 서비스 프로세스만 내려갔거나, 포트 80 과 443 이 방화벽에서 막힌 경우입니다. 서버 IP 로 직접 요청해서 응답이 오는지 보면 DNS 문제와 서버 문제를 바로 구분할 수 있습니다.
리졸버와 브라우저가 이전 응답을 캐시하고 있기 때문입니다. 특히 없는 이름에 대한 부정 응답도 캐시되므로, 고친 직후에는 권한 네임서버에 직접 질의해 값이 맞는지 먼저 확인하고 캐시가 만료되기를 기다리는 편이 정확합니다.
관련 가이드
- DNS 변경이 반영되지 않을 때레코드를 바꿨는데 반영이 안 될 때는 권한 네임서버부터 브라우저까지 계층별로 어디까지 퍼졌는지 확인하면 원인이 바로 드러납니다. TTL 계산, 위임 확인, 엉뚱한 콘솔에서 고친 경우까지 순서대로 정리했습니다.
- SSL 인증서 오류가 뜰 때브라우저가 띄우는 인증서 오류는 문구마다 원인이 다릅니다. 만료, 이름 불일치, 체인 불완전, 신뢰하지 않는 발급자, 혼합 콘텐츠를 구분하고 openssl s_client 로 실제 상태를 확인하는 방법을 정리했습니다.
- 도메인 만료 후 유예 기간과 복구.kr 계열은 만료 후 한 달 안에 갱신하지 않으면 삭제되어 누구나 등록할 수 있게 되고 복구 단계가 없습니다. gTLD는 40일 동안 갱신가로 되살릴 수 있고 그 뒤 30일은 복구 비용이 붙습니다.
- 네임서버 변경하기레토 대시보드에서 네임서버를 바꾸는 방법과, 바꾸기 전에 새 네임서버에 레코드를 먼저 옮겨 두어야 하는 이유. 반영 시간, 검증 방법, 흔한 실패 원인까지 정리했습니다.