nginx 유저, 권한 세팅
nginx 를 systemctl 로 실행한다.
실행자체는 root 로 실행하게 된다.
보통 443, 80 포트에 대한 권한이기에 보안상 master process 는 root 로 실행하게 되고,
worker process 는 nginx 프로세스로 띄우게 된다.
nginx.conf 는
error_log /path/to/error.log notice;
http {
access_log /path/to/access.log main;
...
}
설정해주자.
logrotate 유저, 권한 세팅
logrotate 는 cron 으로 매일 실행한다.
sudo crontab -l 시 확인이 안될 수 있는데,
필자의 경우 journalctl | grep logrotate 로 매일 실행했는지 확인 하거나,
systemctl list-timers | grep logrotate 명령어로 확인할 수 있었다.
logrotate.d/nginx 는
...
create 640 nginx nginxgroup
postrotate
nginx pid 재시작 해주는 스크립트
보통 kill -USR1 $(cat /var/run/nginx.pid)
endscript
참고로 -USR1 은 프로세스를 중단하지 않고 conf 만 리로드하는 방식이다.
파일 디스크립터
로깅을 할 때 어떤 프로세스가 어떤 파일을 물고 있는지
(어떤 파일에 대해 로그를 쓰는지) 확인하는 명령어:
sudo lsof | grep nginx | grep log 를 하면 확인할 수 있다.
로그 파일의 설정
logrotate 시 postrotate 칸에 nginx 를 재실행하는 명령어가 있다.
kill -USR1 $(cat /var/run/nginx.pid) 일 것이다.
이렇게 재시작 해줘야 worker process 가 새로운 파일에 쓰기 시작하고,
과거 파일은 access.log-20240722 와 같이 기록으로 남는다.
새로운 파일에 쓰기 시작한다
= nginx worker process 의 파일 디스크립터가 새로운 파일에 쓰기 시작한다는 뜻이다.
근데 재시작이 올바르게 되지 않는 상황이 발생했다.
그런 경우 systemctl restart nginx 를 해줘야 한다.
이런 상황에 대비해 postrotate 구간의 명령어를 업그레이드 해준다.
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 $(cat /var/run/nginx.pid)
sleep 1
if ! pgrep -f "nginx: worker process" | xargs -I{} lsof -p {} | grep -q "/path/to/new/error.log"; then
systemctl restart nginx
fi
fi
endscript
curl -k https:/localhost:443/ 을 연타해주면,
access.log 가 제대로 작성되는지 확인이 가능하다.
'개발 > Linux & DevOps' 카테고리의 다른 글
Actuator 의 DB 헬스체크 (1) | 2024.12.18 |
---|---|
젠킨스 build.xml 에 대한 고찰 (0) | 2024.11.26 |
Java Green Thread, Native Thread, Kernel Thread, User Thread + Jenkins Executor 최적화 (0) | 2024.07.11 |
aws 초청강의 - msa가 필요한 이유 (0) | 2023.03.24 |
도커 정보 초기화 (0) | 2023.02.28 |