
Ubuntu 14.04 서버에서 기본 nginx 패키지를 사용하고 있습니다. /etc/nginx/nginx.conf
기본 구성으로 사용하고 있으며 /etc/nginx/conf.d/*.conf
및 의 구성을 포함합니다 /etc/nginx/sites-enabled/*
.
기본 nginx 구성에는 액세스 로그에 기록하기 위한 이 지시문이 있습니다.
access_log /var/log/nginx/access.log;
X-Forwarded-For 헤더를 추가하고 싶기 때문에 conf.d
폴더 내부에서 이 작업을 수행합니다.
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
내가 가진 문제는 내 access.log 파일 내에 두 개의 레코드가 있다는 것입니다. 하나는 헤더 정보가 있고 다른 하나는 헤더 정보가 없습니다.
파일 자체를 덮어쓸 수 있다는 것을 알고 있지만 nginx.conf
가능하면 이를 피하는 것이 좋습니다. 또한 동일한 로그 파일( )을 계속 사용하고 싶습니다 access.log
.
nginx에게 이전 지시문을 무시하고 기본 파일을 수정하지 않고 로그 형식만 변경하도록 지시하는 방법이 있나요 nginx.conf
?
답변1
귀하의 질문에 대한 대답은 '아니오'입니다. nginx의 어떤 수준에서든 log_format을 재정의할 수 없으며, 같은 수준에 있을 때는 끄는 것을 제외하고는 access_log를 재정의할 수 없습니다. 그러나 nginx.conf를 변경하지 않고도 원하는 것을 얻을 수 있지만 이를 서버 {} 수준에서 수행해야 합니다.
여기서 문제는 conf.d/*의 포함이 정확히 access_log 지시문이 있는 http {} 내부에 있다는 것입니다. nginx.conf를 건드리지 않고 할 수 있는 일은 사용 중인 서버를 변경하는 것입니다.{} 서버를 설정하지 않은 경우 /etc/nginx/sites-enabled/default에 있는 기본 서버를 사용하게 됩니다. 따라서 nginx.conf를 변경하지 않고 동일한 결과를 얻으려면 conf.d 폴더의 파일을 다음과 같이 변경해야 합니다.
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log off;
그런 다음 서버 내부에{} 다음을 입력하세요.
access_log /var/log/nginx/access.log main;
그러면 처음에 원하는 것을 얻게 될 것입니다.