서버 운영
301 리다이렉트가 제대로 작동하지 않을 때
오래된 URL에서 새 URL로의 리다이렉트가 작동 안 할 때 DNS부터 Nginx 설정까지 확인하는 순서.
리다이렉트가 제대로 되지 않는 증상들
사용자가 "이전 주소가 안 열려요"라고 할 때 여러 원인이 가능하다. 301 리다이렉트가 제대로 응답하는지, 새 주소로 실제로 넘어가는지 확인해야 한다.
흔한 경우들:
- 접속 시간초과 (Connection Timeout)
- 404 에러 페이지로 가기
- 무한 리다이렉트 루프
- 특정 브라우저나 기기에서만 안 됨
네트워크 레벨에서 확인하기
먼저 DNS가 제대로 해석되는지 본다.
dig example.com
결과에서 ANSWER SECTION을 본다. IP 주소가 맞는지 확인하자.
그 다음 실제 HTTP 응답을 본다.
curl -I https://old-url.com
출력:
HTTP/2 301
Location: https://new-url.com
이렇게 나오면 서버 쪽은 정상이다. 만약 200이나 404가 나오면 리다이렉트가 설정되지 않은 거다.
Nginx 설정 확인
Nginx 설정 파일에서 리다이렉트가 제대로 설정되어 있는지 본다.
server {
server_name old-domain.com;
return 301 https://new-domain.com$request_uri;
}
server {
server_name new-domain.com;
# 실제 앱 설정
}
설정을 바꾼 후에는 꼭 문법을 확인한다.
sudo nginx -t
sudo systemctl reload nginx
캐시 때문일 수도 있다
사용자의 브라우저나 ISP 캐시에 오래된 응답이 저장되어 있을 수 있다. 직접 테스트할 때는 curl이나 시크릿 창을 쓴다.
# HTTP 헤더까지 보면서 테스트
curl -v https://old-url.com
# 캐시를 무시하고 테스트 (Chrome 개발자 도구)
# Network 탭에서 "Disable cache" 체크
SSL 인증서 확인
HTTPS에서 리다이렉트가 안 되면 SSL 인증서 문제일 수도 있다.
# 인증서 유효성 확인
openssl s_client -connect old-domain.com:443
# 인증서 만료일 확인
echo | openssl s_client -servername old-domain.com -connect old-domain.com:443 2>/dev/null | openssl x509 -noout -dates
old-domain.com의 인증서가 new-domain.com을 포함하지 않으면 HTTPS로 접속할 수 없다. 이 경우 wildcard 인증서를 쓰거나, 두 도메인을 모두 포함하는 인증서를 발급받아야 한다.
무한 루프 확인하기
new-url.com이 다시 old-url.com으로 리다이렉트하면 무한 루프가 생긴다.
# -L 플래그로 리다이렉트를 따라가면서 보기
curl -L -v https://old-url.com 2>&1 | grep -E '301|302|Location|HTTP'
리다이렉트 체인이 3번 이상 계속되면 뭔가 잘못된 거다.