Bagaimana cara mengkonfigurasi nginx untuk mengembalikan kode status http 429 (Terlalu Banyak Permintaan) alih-alih 503 default (Layanan Tidak Tersedia) ketika pembatasan / pembatasan kecepatan?
FYI, saya menggunakan nginx sebagai proxy terbalik dengan HttpLimitReqModule. Draf spesifikasi untuk kode status 429 adalah RFC6585 .
Pertanyaan (tertutup) ini pada stackexchanged menunjukkan bahwa dimungkinkan untuk menggunakan direktif error_page . Namun, saya tidak ingin mengembalikan 429 jika memang ada masalah server (bukan pelanggan memukul kami terlalu banyak) dan server harus mengembalikan 503 Layanan Tidak Tersedia.
Ada saran?
nginx
http-status-code
adambrod
sumber
sumber
Jawaban:
Berita baik, dengan Versi 1.3.15 http://mailman.nginx.org/pipermail/nginx/2013-March/038306.html
kami memiliki arahan "limit_req_status" dan "limit_conn_status". Saya baru saja mengujinya di Gentoo Linux (perhatikan bahwa Anda perlu mengompilasi module limit_req dan limit_con).
Dengan pengaturan ini saya pikir Anda dapat mencapai apa yang Anda minta:
Saya telah memverifikasi ini dengan cepat:
Di mana sebagian besar permintaan gagal setelah mengaktifkan arahan karena tingginya tingkat permintaan dan batas yang dikonfigurasi di nginx:
sumber
ab
adalah alat dariapache2-utils
. di ubuntu ituab
tetapi di bawah CentOS ituab2
.Berdasarkan tanggapan VBart dan komentar lainnya, jelas bahwa opsi terbaik adalah memetakan 503 kesalahan ke 429s.
Karena nginx (1.3.x) hanya menggunakan 503 kode status untuk limit_req dan limit_conn, ini harus menjadi pendekatan yang bagus.
sumber
Nginx sendiri tidak pernah mengembalikan 503 dalam kasus selain limit_req dan limit_conn.
sumber
(proxy/factcgi/scgi/uwsgi)_intercept_errors
mengaktifkannya. nginx.org/r/proxy_intercept_errors