Używam domyślnego pakietu nginx na serwerze Ubuntu 14.04. Jest używany /etc/nginx/nginx.conf
jako główna konfiguracja, a następnie obejmuje konfiguracje z /etc/nginx/conf.d/*.conf
i /etc/nginx/sites-enabled/*
.
Domyślna konfiguracja nginx ma tę dyrektywę dotyczącą logowania do dziennika dostępu
access_log /var/log/nginx/access.log;
Chciałbym dodać nagłówek X-Forwarded-For, więc robię to w conf.d
folderze:
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;
Problemem jest to, że otrzymuję dwa rekordy w pliku access.log - jeden z informacjami o nagłówku, a drugi bez.
Wiem, że mogę nadpisać nginx.conf
sam plik, ale wolę go unikać, jeśli to możliwe. Chciałbym również nadal używać tego samego pliku dziennika ( access.log
).
Czy istnieje sposób, aby powiedzieć Nginxowi, aby zastąpił poprzednią dyrektywę i po prostu zmienił format dziennika bez modyfikowania głównego nginx.conf
pliku?
źródło
Odpowiedzi:
odpowiedź na twoje pytanie brzmi NIE, nie możesz przesłonić formatu dziennika na żadnym poziomie w nginx i nie możesz przesłonić dziennika dostępu na tym samym poziomie, z wyjątkiem jego wyłączenia. Możesz jednak osiągnąć to, co chciałeś, bez zmiany nginx.conf, ale będziesz musiał to zrobić na poziomie serwera {}.
Problem polega na tym, że dołączenie conf.d / * znajduje się w http {}, czyli dokładnie tam, gdzie znajduje się dyrektywa access_log. To, co możesz zrobić bez dotykania nginx.conf, to zmiana dowolnego serwera {}, którego używasz (jeśli go nie skonfigurowałeś, używasz domyślnego serwera znajdującego się w / etc / nginx / sites-enabled / default). Aby osiągnąć to samo bez zmiany pliku nginx.conf, należy zmienić plik w folderze conf.d na:
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;
A potem na serwerze {} wstaw:
access_log /var/log/nginx/access.log main;
To powinno zapewnić ci to, czego chciałeś na początku.
źródło
main
format_logu, więc musisz wybrać inną nazwę.