
Estou usando o pacote nginx padrão no servidor Ubuntu 14.04. Ele está sendo usado /etc/nginx/nginx.conf
como configuração principal e inclui configurações de /etc/nginx/conf.d/*.conf
e /etc/nginx/sites-enabled/*
.
A configuração padrão do nginx possui esta diretiva para registrar no log de acesso
access_log /var/log/nginx/access.log;
Gostaria de adicionar o cabeçalho X-Forwarded-For, então faço isso dentro da conf.d
pasta:
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;
O problema que tenho é que estou recebendo dois registros dentro do meu arquivo access.log - um com as informações do cabeçalho e outro sem.
Eu sei que posso sobrescrever o nginx.conf
próprio arquivo, mas prefiro evitá-lo, se possível. Eu também gostaria de continuar usando o mesmo arquivo de log ( access.log
).
Existe uma maneira de dizer ao nginx para substituir a diretiva anterior e simplesmente alterar o formato do log sem modificar o nginx.conf
arquivo principal?
Responder1
a resposta à sua pergunta é NÃO, você não pode substituir um log_format em qualquer nível no nginx e não pode substituir access_log quando estiver no mesmo nível, exceto desligá-lo. No entanto, você pode conseguir o que deseja sem alterar o nginx.conf, mas terá que fazer isso no nível do servidor {}.
O problema aqui é que o include de conf.d/* está dentro de http {}, que é exatamente onde está a diretiva access_log. O que você pode fazer sem tocar no nginx.conf é alterar o servidor{} que você está usando (se você não configurou um, está usando o padrão localizado em /etc/nginx/sites-enabled/default). Portanto, para conseguir o mesmo sem alterar o nginx.conf, você deve alterar seu arquivo na pasta conf.d para:
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;
E então dentro do seu servidor{} coloque:
access_log /var/log/nginx/access.log main;
Isso deve lhe dar o que você queria no início.