Senario
Pasukan anda menggunakan Nginx sebagai gerbang API untuk mengarahkan trafik ke beberapa perkhidmatan mikro. Kebelakangan ini, pengguna melaporkan respons lambat dan tamat masa yang berselang. Panduan ini membimbing mendiagnosis dan menyelesaikan isu prestasi biasa yang disebabkan oleh konfigurasi tamat masa hulu dan penimbal proksi yang salah.
Gejala
- Kependaman meningkat (p95 > 5s)
- Sambungan hulu tamat masa (504 Gateway Timeout)
- Penggunaan CPU pekerja nginx tinggi dengan banyak sambungan dalam keadaan CLOSE_WAIT
Diagnosis
- Periksa log ralat nginx:
tail -f /var/log/nginx/error.log | grep upstream - Analisa masa respons hulu menggunakan
curl -w:curl -w "Masa sambung: %{time_connect}\nTTFB: %{time_starttransfer}\nJumlah: %{time_total}\n" -o /dev/null -s http://localhost/your-endpoint - Semak konfigurasi nginx semasa untuk tetapan proksi:
grep -E "proxy_(read|connect|send)_timeout|proxy_buffer" /etc/nginx/conf.d/*.conf
Perintah
- Untuk menambah tamat masa hulu dari 60s lalai kepada 120s untuk lokasi tertentu:
location /api/ { proxy_pass http://backend; proxy_connect_timeout 30; # tamat masa sambungan hulu proxy_read_timeout 120; # tunggu respons dari hulu proxy_send_timeout 30; # menghantar permintaan ke hulu } - Untuk melaraskan penimbal proksi (mengurangkan I/O cakera dan memperbaiki penstriman):
proxy_buffering on; proxy_buffer_size 4k; proxy_buffers 8 4k; proxy_busy_buffers_size 8k; - Untuk membolehkan sambungan keepalive ke hulu bagi penggunaan semula:
upstream backend { server 10.0.1.1:8080; keepalive 32; # sambungan idle maksimum } # dalam location: proxy_http_version 1.1; proxy_set_header Connection "";
Kawalan Risiko
- Sebelum memuat semula nginx, uji konfigurasi:
nginx -t - Gunakan pengedaran secara beransur-ansur menggunakan canary atau blue-green jika boleh.
- Pantau kadar ralat dan kependaman selepas perubahan. Pertimbangkan untuk menetapkan amaran.
Pengembalian (Rollback)
- Kembalikan fail konfigurasi dari sandaran atau kawalan versi.
- Jalankan
nginx -tdansystemctl reload nginx(ataunginx -s reload). - Sahkan dengan arahan ujian yang sama.
Pengesahan
- Ulang
curl -wdan periksa bahawa TTFB berkurang. - Periksa log ralat nginx untuk mengurangkan tamat masa.
- Gunakan
abatauwrkuntuk ujian beban:ab -n 1000 -c 100 http://localhost/your-endpoint - Lihat penggunaan sumber sistem:
top,netstat -tan | grep :80 | wc -l
Bila Menghantar Tiket OpsGlobal
- Jika selepas pelarasan, kependaman masih tinggi atau ralat berterusan.
- Jika pelayan hulu kurang prestasi dan memerlukan pelarasan perkakasan/sumber awan.
- Untuk nasihat seni bina mengenai penskalaan Ingress Nginx dalam Kubernetes (misalnya, mengoptimumkan konfigurasi Ingress Controller).
Senario Penggunaan
Sesuai untuk pasukan yang menyelesaikan isu Performance dan memerlukan aliran kerja yang jelas.
Latar Belakang Masalah
Ketahui cara mendiagnosis dan menyelesaikan masalah prestasi dalam Nginx apabila bertindak sebagai gerbang API, termasuk tetapan tamat masa hulu, penimbal proksi, dan penggumpalan sambungan.
Langkah Penyelesaian
Sahkan impak dan perubahan terkini, kumpul log, konfigurasi dan metrik, kemudian baiki mengikut risiko.
Contoh Arahan
Gantikan contoh dengan nama sumber sebenar dan simpan kata laluan, token atau kunci dalam pembolehubah persekitaran.
Risiko
Sebelum operasi produksi, semak sandaran, akses, tetingkap perubahan dan pelan rollback.
Pelan Rollback
Simpan konfigurasi dan versi asal; rollback konfigurasi, imej atau perubahan pangkalan data jika metrik tidak normal.
Senarai Serahan
Rekod punca isu, arahan penting, langkah pembaikan, hasil pengesahan dan cadangan susulan.
Perlu bantuan isu teknikal serupa?
Jika pelayan, Kubernetes, Docker, CI/CD, pangkalan data atau pemantauan anda bermasalah, hantar log dan konfigurasi untuk diagnosis jauh.