[Nginx] Cara mengalahkan respon_status = 0

Sebuah artikel dari kategori β€œcatatan samping”.

TL: DR:

http2_max_field_size 8k; # всСх спасСт!

Di salah satu proyek, setelah mengubah beberapa logika internal backend, saya mulai mengamati respon_code yang aneh di log, yaitu 0. Di log, tampilannya seperti ini:

{
  "timestamp": "2020-01-17T08:41:51+00:00",
  "remote_addr": "zzz.zzz.zzz.zzz",
  "request_time": 0,
  "upstream_response_time": "",
  "upstream_header_time": "",
  "http_accept_language": "-language",
  "response_status": 0,
  "request": "",
  "host": "example.com",
  "upstream_addr": "",
  "http_referrer": "",
  "request_length": 5854,
  "bytes_sent": 0,
  "http_user_agent": ""
}


Membaca dokumentasi dan mencari di Google tentang topik ini tidak menghasilkan apa-apa - karena... Dinyatakan bahwa perilaku ini terjadi ketika klien menutup koneksi tanpa meneruskan header. Nah, dan berbagai hal eksotis dengan ukuran buffer untuk wsgi_, yang dalam kasus kami tidak sesuai dengan kata "dengan cara apa pun".

Secara umum, kami memutuskan bahwa masalahnya bukanlah suatu masalah, dengan mempertimbangkan fakta bahwa pada volume kami hal itu sama sekali tidak kritis.

Tepatnya sampai saya dibingungkan oleh masalah berikut: dalam beberapa kasus, tautan terbuka tanpa masalah melalui http, tetapi sepenuhnya menolak untuk bekerja melalui https, menghasilkan yang luar biasa: Koneksi #0 ke host example.com dibiarkan utuh
curl: (52) Balasan kosong dari server

Di log, kami hanya dapat melacak hal ini berdasarkan IP - tidak ada permintaan atau data lainnya, seperti dapat dilihat dari contoh di atas. Hanya status terkenalnya yang 0, tetapi saya tahu bahwa saya tidak mengganggu permintaan tersebut! Saya mulai mencari tahu apa yang salah. Dan semuanya menjadi sangat sederhana:

dengarkan 443 ssl http2 simpanan=8192;

Nah, jika Anda menggunakan http2 untuk koneksi ssl, maka tidak cukup hanya mengkonfigurasi request buffer saja, harus dikonfigurasi juga di ngx_http_v2_module yaitu:

Бинтаксис:	http2_max_field_size Ρ€Π°Π·ΠΌΠ΅Ρ€;
Π£ΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΠ΅:	http2_max_field_size 4k;
ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚:	http, server

Membatasi ukuran maksimum header permintaan yang dikompresi menggunakan HPACK. Batasan ini berlaku sama untuk nama dan nilainya. Jika pengkodean Huffman digunakan, ukuran sebenarnya dari string nama dan nilai yang dibongkar mungkin lebih besar. Batas default cocok untuk sebagian besar kueri.

Secara umum, ini dia. Dan mengapa semuanya? Karena panjang linknya panjang - lebih panjang dari 4k yang sama.

Dengan menyetelnya ke, misalnya, 8kb (atau sebanyak yang mungkin cukup), kami memecahkan masalah.
Hal-hal seperti itu.

Sumber: www.habr.com

Tambah komentar