좋은 아침입니다. 이쪽은 인프라의 미야시타입니다.
이번에는 nginx의 로그 관련 설정이 될 예정입니다.
목차
서론
nginx에서 특정 NW에서 로그를 출력하지 않는 설정을 setenv의 정의를 사용해 구현하고 싶었는데, setenv는 apache에서 자주 구현되지만 같은 기능이 없어서 찾아봤습니다. 사용법으로는, 로그를 출력하지 않아도 되는 상황, 예를 들어 부하 분산기 상태 확인이나 모니터링 서버와의 연결 같은 경우에 사용할 수 있습니다. 분석에 필수는 아니며, 불필요한 DISK I/O도 줄여줍니다.
ngx_http_geo_module
문서에 설명된 대로 IP 주소를 변수로 설정할 수 있습니다.
특정 국가의 NW가 연결을 거부할 때 일반적으로 사용됩니다. 이런 경우에는 대량으로 등록된 별도의 파일로 관리할 수도 있습니다.
nginx 설정 중
nginx.conf.
[shell]# vi nginx.conf http { include mime.types; # not access_log\ IP의 지리 $no_log {기본 0; 172.0.1.0/24 1; } 서버 {(생략) 위치 / { root /var/www/html; index index.cgi index.php index.html index.htm; if ($no_log) { access_log off; } } [/shell]
기본 문법은 geo [$address] $variable { ... }입니다. "기본값"은 조건에 포함되지 않은 모든 것에 대해 "0"이며, 지정된 IP는 "1"입니다. 만약 ($variable) {access_log off; } 가 제한하려는 계층 구조의 위치에 작성되어 있고, () {access\ off; } "1"을 쓰면 "1"에 해당하는 로그가 출력되지 않습니다.
마지막으로, nginx를 다시 시작하세요.
[shell]# /etc/init.d/nginx 재시작[/shell]
이제 access_log 172.0.1.0/24의 연결 로그가 더 이상 표시되지 않습니다.
Apache처럼 Serenv로도 가능해 보이지만, enginx가 더 쉬웠습니다.