Saya menggunakan paket nginx default di server Ubuntu 14.04. Ini digunakan /etc/nginx/nginx.conf
sebagai konfigurasi utama, dan kemudian termasuk konfigurasi dari /etc/nginx/conf.d/*.conf
dan /etc/nginx/sites-enabled/*
.
Konfigurasi nginx default memiliki arahan ini untuk masuk ke log akses
access_log /var/log/nginx/access.log;
Saya ingin menambahkan header X-Forwarded-For, jadi saya melakukan ini di dalam conf.d
folder:
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;
Masalah yang saya miliki adalah bahwa kemudian saya mendapatkan dua catatan di dalam file access.log saya - satu dengan info header dan yang lainnya tanpa.
Saya tahu saya bisa menimpa nginx.conf
file itu sendiri, tetapi saya lebih suka menghindarinya jika memungkinkan. Saya juga ingin tetap menggunakan file log yang sama ( access.log
).
Apakah ada cara untuk memberitahu nginx untuk mengganti arahan sebelumnya dan hanya mengubah format log tanpa memodifikasi nginx.conf
file utama ?
sumber
Jawaban:
jawaban untuk pertanyaan Anda adalah TIDAK, Anda tidak dapat mengesampingkan log_format pada tingkat apa pun di nginx dan Anda tidak dapat mengesampingkan access_log saat berada di tingkat yang sama, kecuali mematikannya. Namun, Anda dapat mencapai apa yang Anda inginkan tanpa mengubah nginx.conf tetapi Anda harus melakukannya di level server {}.
Masalahnya di sini adalah bahwa menyertakan conf.d / * ada di dalam http {}, yang persis di mana direktif access_log berada. Apa yang dapat Anda lakukan tanpa menyentuh nginx.conf adalah mengubah server apa pun {} yang Anda gunakan (jika Anda tidak menyetelnya, Anda menggunakan server default yang terletak di /etc/nginx/situs-enabled / default). Jadi untuk mencapai hal yang sama tanpa mengubah nginx.conf Anda harus mengubah file Anda di folder conf.d menjadi:
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;
Dan kemudian di dalam server Anda {} masukkan:
access_log /var/log/nginx/access.log main;
Itu seharusnya memberi Anda apa yang Anda inginkan di awal.
sumber
main
log_format, sehingga Anda perlu memilih nama lain.