Balas dengan 200 dari konfigurasi Nginx tanpa menyajikan file

122

Saya telah mengkonfigurasi Apache untuk mengirim kembali 200 respons tanpa menyajikan file apa pun dengan baris konfigurasi ini

Redirect 200 /hello

Bisakah saya melakukan ini dengan Nginx? Saya tidak ingin menyajikan file, saya hanya ingin server merespons dengan 200 (saya hanya mencatat permintaan).

Saya tahu saya dapat menambahkan file indeks dan mencapai hal yang sama, tetapi melakukannya dalam konfigurasi berarti ada satu hal yang kurang salah.

Theo
sumber

Jawaban:

261

Ya kamu bisa

location / {
    return 200 'gangnam style!';
    # because default content-type is application/octet-stream,
    # browser will offer to "save the file"...
    # if you want to see reply in browser, uncomment next line 
    # add_header Content-Type text/plain;
}
cadmi
sumber
1
bagaimana cara menambahkan baris baru ke respons? gangnam\nstyle?
mundur
1
@tback tentu saja, benar Anda
cadmi
4
add_header tidak berfungsi untuk saya karena menambahkan tajuk lain alih-alih mengganti 'tipe konten' yang lama. Dalam respons saya, saya memiliki 2 tajuk 'Jenis konten': $ curl -v localhost / healthcheck / h1_pio> GET / healthcheck / h1_pio HTTP / 1.1> User-Agent: curl / 7.38.0> Host: localhost> Terima: / > <HTTP / 1.1 200 OK <Tanggal: Sel, 11 Okt 2016 13:27:53 GMT <Tipe-Konten: application / octet-stream <Isi-Panjang: 25 <Koneksi: keep-live <Jenis-Konten: application / json
jmcollin92
1
@ jmcollin92 komentar Anda tidak ada hubungannya dengan pertanyaan yang diajukan dan yang jawabannya diberikan. karena Anda jelas memiliki semacam proxy_pass, fascgi_pass, apa pun ... tapi saya masih menjawab location / healthcheck / h1_pio {# proxy_pass blablabla apa yang Anda butuhkan; proxy_hide_header Content-Type; add_header Aplikasi Content-Type / json; } di masa depan, ajukan pertanyaan Anda dengan benar dan di lokasi yang tepat
cadmi
6
@ jmcollin92 yang dapat terjadi jika Anda memiliki default_type yang sudah dideklarasikan di tempat lain. Anda dapat menimpanya dengan menggunakan default_type text/plain;bagian dalam blok lokasi sebagai pengganti add_headerarahan.
tjb1982
20

Anda perlu menggunakan 204 karena Nginx tidak akan mengizinkan 200 tanpa isi respons. Untuk mengirim 204 Anda cukup menggunakan arahan balik ke return 204;di lokasi yang sesuai.

Martin Fjordvald
sumber
Jika Anda mencoba melihat ini melalui browser, itu akan terlihat seperti tidak melakukan apa-apa. itu disengaja. Anda tidak melayani apa pun (204), ini tidak menampilkan apa pun. Untuk membuktikan bahwa Anda melayani 204, gunakan curl.
jnovack
4

Sesuai definisi kode status, saya yakin Anda menginginkannya menjadi 204, dan bukan 200. 200 perlu dengan sumber daya dalam respons, atau saya menduga sebagian besar browser yang waras akan bingung dengan hal ini. Yang lain yang bisa Anda gunakan adalah 304, yang untuk konten yang di-cache.

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

sandroid
sumber
Tentu, buat 204, bagaimana saya melakukannya? Meskipun saya sangat meragukan browser apa pun akan dikacaukan oleh tubuh kosong.
Theo
1
tubuh kosong masih merupakan respons, dengan objek, seperti index.html kosong. Apa yang Anda minta adalah memberikan 200 respons tanpa sumber daya terlampir (tidak ada file yang dilayani). Adapun bagaimana tepatnya melakukannya di nginx, saya perlu mencarinya sendiri, saya hanya pernah melakukan ini pada apache, dan saya tidak dapat mengingatnya begitu saja.
sandroid
304 sepertinya akan mengirim semua sinyal yang salah untuk hal-hal seperti debugging dan pengembalian sementara.
Kzqai
2

Untuk menyelesaikan jawaban @Martin Fjordval, berhati-hatilah jika Anda menggunakan konfigurasi seperti itu untuk melakukan pemeriksaan kesehatan.

Sementara 204kode HTTP secara semantik sempurna untuk pemeriksaan kesehatan (indikasi keberhasilan tanpa konten), beberapa layanan tidak menganggapnya sebagai keberhasilan.

Yaitu, saya memiliki masalah dengan Google Cloud Load-balancers .

toadjaune
sumber