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

우분투 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의 모든 수준에서 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;

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


답변