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

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

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;

그러면 처음에 원하는 것을 얻게 될 것입니다.

관련 정보