서버 운영
Nginx 설정이 제대로 먹혔는지 확인하는 방법
Nginx 수정 후 실제로 적용되지 않거나 예상과 다르게 동작할 때 확인해야 할 체크리스트.
Nginx 설정을 만지고 나면 정말 제대로 적용됐는지 확인해야 한다. 문법은 맞는데 예상과 다르게 동작하는 경우가 생각보다 자주 있다.
문법을 먼저 확인한다
설정을 수정한 후 가장 먼저 할 일이다.
sudo nginx -t
문법 에러가 있으면 이 단계에서 걸린다. "successful" 메시지가 나와야 다음으로 진행한다.
설정을 다시 로드한다
문법이 맞으면 Nginx에 설정을 다시 읽게 한다.
sudo systemctl reload nginx
또는
sudo service nginx reload
reload는 서비스를 재시작하지 않고 설정만 다시 읽으므로, 기존 연결을 끊지 않는다.
수정이 적용됐는지 확인한다
실제로 설정이 먹혔는지 테스트한다.
curl -I http://localhost
헤더를 확인해서 커스텀 헤더나 리다이렉트가 제대로 나타나는지 본다.
도메인으로 접근한다면:
curl -I https://example.com
DNS 캐시가 문제는 아닌지 확인한다
로컬 PC의 DNS 캐시 때문에 오래된 IP로 접근할 수 있다.
dig example.com +short
IP 주소가 맞는지 확인한다. 필요하면 로컬 DNS 캐시를 비운다.
# macOS
sudo dscacheutil -flushcache
# Linux
sudo systemctl restart systemd-resolved
프록시 설정을 확인한다
대부분의 상황에서 Nginx는 앞단 프록시로 동작한다. 백엔드가 제대로 받는지 확인한다.
curl -v http://localhost:3000
백엔드 포트(예: 3000)로 직접 접근해서 백엔드가 살아있는지 본다.
로그를 본다
Nginx 에러 로그에서 뭐가 잘못됐는지 알 수 있다.
sudo tail -f /var/log/nginx/error.log
접속한 후 로그를 보면서 어디서 실패하는지 본다.
액세스 로그는:
sudo tail -f /var/log/nginx/access.log
방화벽이 포트를 막고 있지는 않은지 확인한다
sudo ufw status
필요한 포트(80, 443)가 열려있어야 한다. 막혀있다면:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
서버 시간이 정확한지 확인한다
SSL 인증서 검증에서 시간 차이 때문에 실패하는 경우도 있다.
date
시간이 크게 밀려있다면 NTP로 동기화한다.
결론
Nginx 설정은 문법이 맞더라도 여러 이유로 제대로 동작하지 않을 수 있다. 문법 검사 → 설정 재로드 → 실제 테스트 → 로그 확인 이 네 단계를 거치면 대부분의 문제를 찾을 수 있다.