substituindo a diretiva nginx access_log - entradas de log duplicadas

substituindo a diretiva nginx access_log - entradas de log duplicadas

Estou usando o pacote nginx padrão no servidor Ubuntu 14.04. Ele está sendo usado /etc/nginx/nginx.confcomo configuração principal e inclui configurações de /etc/nginx/conf.d/*.confe /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.dpasta:

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.confpró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.confarquivo 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.

informação relacionada