sobrescrevendo a diretiva nginx access_log - entradas de log duplicadas

12

Estou usando o pacote nginx padrão no servidor Ubuntu 14.04. Ele está usando /etc/nginx/nginx.conf como a configuração principal e inclui as configurações de /etc/nginx/conf.d/*.conf e /etc/nginx/sites-enabled/* .

A configuração padrão do nginx tem essa diretiva para logar no log de acesso

access_log /var/log/nginx/access.log;

Gostaria de adicionar o cabeçalho X-Forwarded-For, portanto, faço isso dentro da pasta 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;

O problema que tenho é que, em seguida, 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 arquivo nginx.conf , mas eu 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 sobrescrever a diretiva anterior e simplesmente alterar o formato de log sem modificar o arquivo principal nginx.conf ?

    
por Yoav Aner 15.10.2015 / 11:37

1 resposta

0

a resposta a sua pergunta é NÃO, você não pode substituir um log_format em qualquer nível no nginx e não pode sobrescrever access_log quando estiver no mesmo nível, exceto desativá-lo. No entanto, você pode conseguir o que deseja sem alterar o nginx.conf, mas terá que fazê-lo no nível do servidor {}.

O problema aqui é que a inclusão de conf.d / * está dentro do http {}, que é exatamente onde a diretiva access_log está. O que você pode fazer sem tocar em nginx.conf é alterar qualquer servidor {} que esteja usando (se você não tiver configurado um que esteja 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 depois dentro do seu servidor {} coloque: access_log /var/log/nginx/access.log main;

Isso deve te dar o que você queria no começo.

    
por 05.10.2018 / 06:41