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).

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.


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;
}

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.


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"

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.