← 전체 글로 돌아가기

서버 운영

도메인으로 접속할 때 간헐적으로 느릴 때

Nginx 뒤에서 도메인 연결이 불안정하거나 느리다면, DNS 응답, Nginx 설정, 인증서를 순서대로 확인해야 한다.

도메인 연결을 통해 접속하면 가끔 빨라졌다가 느려지는 현상이 있다면, 대부분 DNS 캐시, Nginx 설정, 또는 SSL/TLS 핸드셰이크 문제다.

DNS 응답 속도 확인

dig example.com
dig +trace example.com  # 재귀 조회 경로 확인

DNS 응답 시간(Query time)을 본다. 100ms 이상이면 느린 것이다.

특정 DNS 서버로 쿼리하려면:

dig @8.8.8.8 example.com  # Google DNS
dig @1.1.1.1 example.com  # Cloudflare DNS

HTTP/HTTPS 응답 확인

curl -w "@-" -o /dev/null https://example.com << 'EOF'
time_connect: %{time_connect}
time_starttransfer: %{time_starttransfer}
time_total: %{time_total}
EOF

이 명령어로 각 단계별 시간을 본다:

  • time_connect: TCP 연결 시간
  • time_starttransfer: 첫 바이트까지의 시간
  • time_total: 전체 시간

Nginx 설정 확인

Nginx 설정 문법이 맞는지 먼저 본다:

sudo nginx -t

Nginx 로그를 본다:

sudo tail -f /var/log/nginx/access.log  # 접속 로그
sudo tail -f /var/log/nginx/error.log   # 에러 로그

응답 시간이 길거나 에러가 많으면 Nginx 설정 문제일 가능성이 높다.

SSL/TLS 인증서 확인

openssl s_client -connect example.com:443 -showcerts

또는 더 간단하게:

curl -vI https://example.com

연결 시간이 길면 인증서 검증이나 핸드셰이크에 문제가 있을 수 있다.

프록시 규칙 확인

Nginx가 백엔드 서버로 올바르게 프록시하는지 확인한다:

grep -n proxy_pass /etc/nginx/sites-enabled/example.com

프록시 주소가 맞는지, 타임아웃 설정이 적절한지 본다:

proxy_pass http://backend:3000;
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;

캐시 설정 확인

Nginx 캐시 때문에 이전 데이터가 보일 수도 있다:

proxy_cache_valid 200 10m;
proxy_cache_key $scheme$request_method$host$request_uri;

캐시 무효화:

curl -X PURGE https://example.com/page

동시 접속 수 확인

ss -n | grep ESTABLISHED | wc -l

동시 접속이 많으면 응답이 느려질 수 있다. Nginx 워커 프로세스 수를 조정해야 할 수도 있다:

worker_processes auto;  # CPU 코어 수만큼 자동 설정

빠른 진단 순서

  1. DNS 응답 시간 확인
  2. curl로 각 단계별 시간 측정
  3. Nginx 문법 확인
  4. Nginx 로그에서 느린 요청 찾기
  5. SSL 인증서 확인
  6. 프록시 타임아웃 설정 확인
  7. 캐시 설정 확인

이 순서대로 확인하면 대부분의 도메인 연결 문제를 찾을 수 있다.