서버 운영
도메인 연결 후 접속이 안 될 때 DNS부터 확인하는 법
도메인 레코드를 바꾼 뒤 접속이 안 되면 DNS 전파, 캐시, 인증서, nginx 설정 중 어디서 막혔는지 순서대로 확인해야 한다.
도메인을 새로 연결하거나 A 레코드를 바꾼 직후에 접속이 안 되는 상황은 흔하다. DNS 전파 문제인지, 인증서 문제인지, nginx 설정 문제인지를 구분해야 방향이 잡힌다.
DNS가 맞는 IP를 가리키는지 확인
dig example.com +short
dig example.com @8.8.8.8 +short
로컬 DNS 캐시 때문에 잘못된 값을 볼 수 있으니 @8.8.8.8로 외부 DNS에 직접 물어보는 게 정확하다. 두 결과가 다르다면 전파 중이거나 로컬 캐시가 오래된 것이다. DNS 전파는 TTL 설정에 따라 수 분에서 수 시간이 걸린다.
HTTP 응답 헤더 확인
curl -I https://example.com
HTTP/2 200이 나오면 정상이다. Could not resolve host면 DNS가 아직 전파 안 된 것이고, SSL connect error면 인증서 문제다. Connection refused면 서버에 해당 포트가 열려 있지 않거나 nginx가 안 떠 있는 것이다.
nginx 설정 확인
DNS는 맞는데 접속이 안 된다면 nginx를 본다.
sudo nginx -t
sudo tail -n 30 /var/log/nginx/error.log
nginx -t에서 문법 에러가 나오면 설정이 제대로 로드되지 않은 것이다. server_name이 요청 도메인과 일치하는지, listen 포트가 맞는지 확인한다.
인증서 도메인 일치 여부
curl -vI https://example.com 2>&1 | grep -E 'subject:|expire'
인증서의 CN이나 SAN이 접속 도메인과 일치해야 한다. 와일드카드 인증서(*.example.com)는 서브도메인에는 통하지만 루트 도메인(example.com)에는 적용 안 된다.
Cloudflare를 쓰는 경우
Cloudflare 프록시(오렌지 클라우드)를 켜면 dig에서 나오는 IP는 Cloudflare IP다. 원본 서버 IP와 다르다는 것은 정상이다. 이 경우 Cloudflare 대시보드에서 SSL 모드를 확인한다. Full (strict) 모드라면 원본 서버에도 유효한 인증서가 있어야 연결된다. Cloudflare 캐시가 오래된 응답을 돌려주는 경우도 있으니 대시보드에서 캐시를 퍼지(purge)해보는 것도 방법이다.