Bagaimana cara menghasilkan variabel dalam log nginx untuk debugging

83

Saya menguji nginx dan ingin menampilkan variabel ke file log. Bagaimana saya bisa melakukan itu dan file log mana yang akan digunakan (akses atau kesalahan).

lalalala
sumber

Jawaban:

143

Anda dapat mengirim nilai variabel nginx melalui header. Berguna untuk pengembangan.

add_header X-uri "$uri";

dan Anda akan melihat di header respons browser Anda:

X-uri:/index.php

Saya terkadang melakukan ini selama pengembangan lokal.

Ini juga berguna untuk memberi tahu Anda jika suatu ayat dijalankan atau tidak. Cukup taburkan di dalam klausa Anda untuk melihat apakah klausa itu digunakan.

location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt)$ {
    add_header X-debug-message "A static file was served" always;
    ...
}

location ~ \.php$ {
    add_header X-debug-message "A php file was used" always;
    ...
}

Jadi mengunjungi url seperti http://www.example.com/index.php akan memicu tajuk yang terakhir saat mengunjungi http://www.example.com/img/my-ducky.png akan memicu tajuk yang sebelumnya.

yuvilio
sumber
29
Perhatikan bahwa hanya add_headerakan berfungsi pada permintaan yang berhasil . Dokumentasi menyatakan bahwa itu hanya dapat diterapkan pada tanggapan dengan kode 200, 204, 301, 302 atau 304. Oleh karena itu, tidak dapat digunakan untuk men-debug kesalahan HTTP.
John WH Smith
31
@ JohnWHSmith: Seperti yang dicatat marat dalam jawaban ini . Pada versi 1.7.5 , nginx menambahkan "selalu" parameter untuk add_headeryang akan mengembalikan header, tidak peduli apa kode respon. Jadi misalnya, add_header X-debug-message "A php file was used" always;harus bekerja bahkan untuk 500 kode kesalahan.
yuvilio
6
Ini sama sekali tidak menjawab pertanyaan. Orang itu ingin masuk untuk log file bukan ke klien.
Avamander
37

Anda dapat mengembalikan string sederhana sebagai respons HTTP:

location /
{
    return 200 $document_root;
}
Thomas Decaux
sumber
1
Bagaimana jika Anda ingin mengembalikan dua nilai variabel?
BringBackCommodore64
Pergi ke lokasi segera membuka dialog Simpan Sebagai browser saya (diuji pada Opera, Chromium). Tidak ada respons sama sekali.
BringBackCommodore64
@ BringBackCommodore64 Menambahkan header teks-jenis teks / html dapat membantu.
bitwise
Menggunakan Postman , ini berfungsi tanpa header tambahan. Terima kasih!
aexl
19

Anda dapat mengatur format log akses khusus menggunakan log_formatarahan yang mencatat variabel yang Anda minati.

Mgorven
sumber
2
terima kasih, dan saya kira tidak ada cara yang lebih mudah untuk output satu variabel dengan sendirinya?
lulalala
@ Lulalala Bukan yang saya tahu.
Mgorven
Dimungkinkan mengatur level log dalam direktif error_logke debugsehingga Anda dapat melihat nilai variabel dan blok yang dieksekusi. Contoherror_log file.log debug
Victor Aguilar
1
perhatikan bahwa variabel kosong ditampilkan seperti -dalam log, tetapi benar-benar kosong dalam kode nginx, Anda tidak boleh memeriksa -kapan saja. Ini terkadang membingungkan pengguna.
higuita
6

Opsi lain adalah memasukkan modul gema ketika Anda membangun nginx, atau menginstal OpenResty yang dibundel dengan banyak ekstensi nginx (seperti gema.)

Kemudian Anda bisa menaburkan konfigurasi Anda dengan pernyataan seperti:

echo "args: $args"
Mark Evans
sumber
2
Ketika saya mencoba ini bergema ke file teks biasa di server mengganggu output dari halaman yang sebenarnya.
JaredMcAteer
Ada echo_logarahan dalam pengembangan.
Gajus