nginx access_log 지시문 재정의-중복 로그 항목


16

우분투 14.04 서버에서 기본 nginx 패키지를 사용하고 있습니다. 그것은 사용하는 /etc/nginx/nginx.conf기본 구성으로하고, 다음부터 CONFIGS 포함 /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파일 을 수정하지 않고 단순히 로그 형식을 변경하도록 지시하는 방법이 있습니까?


아니. nginx.conf에서 제거하십시오
Alexey Ten

1
이에 대한 티켓을 열었습니다. trac.nginx.org/nginx/ticket/1084
cweiske

답변:


4

귀하의 질문에 대한 대답은 아니오이며, nginx의 모든 수준에서 log_format을 재정의 할 수 없으며 동일한 수준에있을 때 access_log를 재정의 할 수 없습니다. 그러나 nginx.conf를 변경하지 않고 원하는 것을 얻을 수 있지만 서버 {} 수준에서 수행해야합니다.

여기서 문제는 conf.d / *의 포함이 http {} 안에 있으며, 여기서 정확히 access_log 지시문이 있습니다. 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;

처음에 원하는 것을 얻을 수 있습니다.


고마워, 잘 작동합니다. 일반적으로 이미 mainlog_format이 있으므로 다른 이름을 선택해야합니다.
Kutzi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.