nginx 운영 기본기: sites-available, conf.d, 로그, reload
한 서버에서 nginx를 운영할 때 필요한 디렉토리 구조/검증/로그/갱신 루틴을 체크리스트로 정리
nginx는 설정 파일이 여러 군데로 나뉘고(메인/가상호스트/공통 스니펫), 적용도 reload/restart가 달라서 초보자일수록 헷갈립니다.
이 문서는 “한 서버에서 nginx를 안정적으로 운영하기 위한 기본 루틴”을 정리합니다.
1) 설정 파일 구조(가장 흔한 형태)
Ubuntu 계열에서 자주 보는 구조입니다.
- 메인:
/etc/nginx/nginx.conf - 공통 설정:
/etc/nginx/conf.d/*.conf - 사이트(가상호스트):
/etc/nginx/sites-available/*→/etc/nginx/sites-enabled/* - 로그:
/var/log/nginx/access.log,/var/log/nginx/error.log
핵심은:
sites-enabled는 심볼릭 링크 모음이라 “실제 편집 대상”이 아닙니다.- 공통 기능(봇 차단, gzip, 공통 헤더 등)은
conf.d로 분리하면 유지보수가 쉬워집니다.
2) 적용 전/후 기본 명령어
2-1) 설정 검증
sudo nginx -t
2-2) 변경 반영(권장: reload)
sudo systemctl reload nginx
reload는 워커 프로세스를 교체하면서 커넥션을 최대한 유지합니다.restart는 연결이 끊길 수 있으니, 정말 필요할 때만 사용합니다.
2-3) “현재 로드된 전체 설정” 확인
sudo nginx -T | less
sites-enabled에서 어떤 파일을 실제로 include하고 있는지, 최종적으로 어떤 설정이 되었는지 확인할 때 유용합니다.
3) Certbot/Let’s Encrypt 운영 루틴
3-1) ACME 챌린지 webroot
도메인이 여러 개면, 각 server 블록에 아래를 넣는 게 가장 안전합니다.
location ^~ /.well-known/acme-challenge/ {
root /var/www/letsencrypt;
}
관련 레시피: nginx: ACME(webroot) 챌린지 경로 추가
3-2) 갱신 테스트
sudo certbot renew --dry-run
4) 공통 정책은 conf.d로 분리하기
예를 들어 “악성 봇 User-Agent 차단”은 map으로 두고, 각 사이트에서는 $is_bad_bot만 사용하도록 하면 됩니다.
관련 레시피: nginx: User-Agent map으로 봇 차단하기
5) 자주 생기는 실수
location우선순위가 기대와 다르게 적용됨 (^~, 정규식 location)proxy_pass의 슬래시(/) 유무로 업스트림 경로가 달라짐alias와root를 혼동해서 파일이 404로 떨어짐- 정적 자산에 캐시를 걸었는데, 해시 없는 파일까지 365d로 고정해 버림
같이 보면 좋은 문서: