cara terbaik untuk men-debug file konfigurasi nginx?

37

Saya memiliki banyak aturan penulisan ulang yang harus saya porting dari apache ke nginx.

Ini adalah proses yang agak menyakitkan karena saya tidak dapat melihat apakah aturan penulisan ulang saya dan kondisi "jika" berfungsi seperti yang saya inginkan.

Apache memang memiliki debugging untuk modul penulisan ulangnya. Apa yang bisa saya lakukan untuk nginx?

Jiho Kang
sumber

Jawaban:

37

Aktifkan rewrite_log:

rewrite_log on;

dan atur level debug dalam error_logarahan:

error_log /var/log/nginx/localhost.error_log notice;
kuanta
sumber
sangat dekat dengan Apache;) Saya pasti harus melihat nginx
Olivier Pons
Perhatikan bahwa ini dapat digunakan untuk lebih dari debugging penulisan ulang. Anda dapat menambahkan "tulis ulang DEBUG DEBUG break;" di mana pun Anda suka di konfigurasi nginx dan lihat kapan ia terkena. Baris penulisan ulang ini secara efektif tidak melakukan apa-apa (jika lokasi "DEBUG" cocok, ganti dengan "DEBUG") selain memicu baris yang akan dicatat. Secara teknis Anda bahkan dapat menampilkan variabel seperti ini: "menulis ulang. * $ Request break;" atau menulis ulang. * "'$ http_x_forwarded_for' $ request" break; - walaupun ini menyebabkan permintaan gagal. Akan lebih baik untuk menambahkan variabel ke format log khusus untuk access_log.
Curtis Yallop
14

Aktifkan dukungan debug , lalu setel level debug di error_log.

error_log   /var/log/nginx/error.log debug;

Sekarang Anda dapat mengekor log dan mengirimkan permintaan Anda. Mungkin ada detail lebih dari yang Anda inginkan, tapi itu kadang bisa menjadi penyelamat.

Oh, dan Anda harus sadar bahwa jika itu jahat , setidaknya dalam konteks lokasi ...

Rossnz
sumber
3
noticejauh lebih baik daripada debugsebagai error_leveluntuk debugging penulisan ulang karena akan melewatkan banyak tingkat rendah men-debug tidak relevan info (misalnya SSL atau gzip rincian; 50 + baris per permintaan).
Dan Dascalescu
1

Menggunakan log dan dan dukungan bawaan untuk debugging jelas merupakan cara yang paling masuk akal. Jika Anda melakukan beberapa debugging perutean cepat pada tahap awal dan hanya ingin berinteraksi melalui browser / klien, gunakan "teks" 4xx yang dikembalikan; arahan juga dapat memberi Anda jawaban yang Anda inginkan dengan sedikit usaha. Sebagai contoh,

http {
  server {
    listen 80;
    server_name mydomain.net;
    return 404 "mydomain 80 route";
  }

  server {
    listen 80 default_server;
    return 404 "default 80 route";
  }
}

Teks di halaman web yang dikembalikan akan memberi tahu Anda yang servermemblokir permintaan Anda yang dipicu.

Semoga ini membantu!
Andres

fr_andres MendukungMonicaCellio
sumber