mengganti nginx access_log directive - duplikat entri log

16

Saya menggunakan paket nginx default di server Ubuntu 14.04. Ini digunakan /etc/nginx/nginx.confsebagai konfigurasi utama, dan kemudian termasuk konfigurasi dari /etc/nginx/conf.d/*.confdan /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.dfolder:

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.conffile 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.conffile utama ?

Yoav Aner
sumber
Nggak. Hapus saja dari nginx.conf
Alexey Ten
1
Saya sudah membuka tiket untuk ini; trac.nginx.org/nginx/ticket/1084
cweiske

Jawaban:

4

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.

Keberanian
sumber
Terima kasih, itu bekerja dengan baik. Kecuali bahwa biasanya sudah ada mainlog_format, sehingga Anda perlu memilih nama lain.
Kutzi