cari
RumahOperasi dan penyelenggaraanNginxBagaimana untuk menyelesaikan kod status HTTP perkhidmatan nginx+php-fpm 502

Untuk salah satu projek web kami, disebabkan peningkatan dalam bandar baharu, bilangan lawatan telah meningkat dan tekanan terhadap db telah meningkat Sebagai pihak perniagaan yang menyediakan antara muka, sejumlah besar permintaan "502". telah dilaporkan baru-baru ini oleh maklum balas hiliran.

502, gerbang buruk, biasanya ralat di hulu (ini adalah PHP, sebab biasa 502 ialah pelaksanaan skrip melebihi masa tetapan tamat masa, atau tetapan tamat masa terlalu besar). menyebabkan proses PHP mengambil masa yang lama Ia tidak boleh dikeluarkan dan tiada proses pekerja terbiar untuk mengambil tetamu.

Projek kami disebabkan oleh tetapan masa pelaksanaan PHP yang terlalu singkat Dalam kes ini, anda boleh terlebih dahulu meningkatkan masa pelaksanaan PHP dengan sewajarnya dan memastikan bahawa Pengoptimuman 502 akan mengambil lebih banyak masa.

Terdapat dua pilihan untuk mengawal masa pelaksanaan php, max_execution_time dalam php.ini dan request_terminate_timeout dalam php-fpm request_terminate_timeout boleh mengatasi max_execution_time, jadi jika anda tidak mahu menukar php.ini global, tukar sahaja. php- Konfigurasi fpm sudah memadai.

Di bawah saya akan menganalisis secara terperinci mengapa nginx mengembalikan 502 apabila pelaksanaan skrip php melebihi masa yang ditetapkan.

Mari kita tetapkan adegan dahulu dan hasilkan semula masalah:

nginx dan php masing-masing memulakan hanya seorang pekerja untuk penjejakan yang mudah.

permintaan_terminate_timeout php-fpm ditetapkan kepada 3s.

Uji skrip test.php

sleep(20);
echo 'ok';

go go go:

Lawati www.v.com/test.php dalam penyemak imbas, dan ia akan muncul seperti yang dijangkakan selepas 3 saat...404 ? ? ? apa? ? ?

Bagaimana untuk menyelesaikan kod status HTTP perkhidmatan nginx+php-fpm 502

Permulaan yang buruk, cepat lihat fail konfigurasi nginx

Bagaimana untuk menyelesaikan kod status HTTP perkhidmatan nginx+php-fpm 502

Konfigurasi lokasi ini apabila Ralat 5xx berlaku Lompat ke antara muka yang kelihatan bagus, tetapi saya tidak mempunyai fail 50x.html di bawah /usr/share/nginx/html. Jadi saya mendapat 404. Tidakkah ini menjejaskan ketepatan penghakiman saya terhadap masalah itu? Komen sahaja! Lawati lagi, tunggu 3 saat, dan akhirnya antara muka 'biasa' keluar.

Bagaimana untuk menyelesaikan kod status HTTP perkhidmatan nginx+php-fpm 502

Memandangkan persekitaran sudah sedia, mari ikut rutin dan ikut rutin penyelesaian masalah untuk masalah web dahulu:

nginx:

Bagaimana untuk menyelesaikan kod status HTTP perkhidmatan nginx+php-fpm 502

Ralat yang dilaporkan adalah recv() gagal (104: sambungan ditetapkan semula oleh rakan sebaya.

Recv gagal dan sambungan telah ditetapkan semula. Mengapakah tetapan semula sambungan? Adakah ia benar? daripada php. dalam php.ini Tetapi di sini kita tidak melihat ralat php, tetapi pada ralat php-fpm ditentukan oleh pilihan error_log dalam php-fpm.conf)

Setiap permintaan menjana 2 amaran dan 1 notis:

Bagaimana untuk menyelesaikan kod status HTTP perkhidmatan nginx+php-fpm 502amaran: Pelaksanaan skrip tamat masa dan ditamatkan

amaran: Proses anak menerima sigterm. Isyarat telah keluar.

Notis: Memulakan sub-proses baharu (kerana saya menetapkan pm.min_spare_servers = 1)

Nampaknya jika proses pekerja php tamat, ia bukan sahaja akan ditamatkan pelaksanaan skrip , dan proses pekerja juga akan keluar Nampaknya sambungan ralat nginx ditetapkan semula kerana proses pekerja php keluar (jika satu pihak dalam sambungan tcp diputuskan, pertama akan dihantar kepada pihak lain)

Melalui log Telah diketahui bahawa pelaksanaan skrip php tamat dan sub-proses pekerja keluar, menyebabkan nginx melaporkan tetapan semula sambungan ralat oleh rakan sebaya Mari kita gunakan strace untuk melihat situasi php dan nginx:

php:

1.Terima permintaan sambungan nginx (soket, ikat dan dengar semuanya selesai dalam induk). port nginx ialah 47039. Membaca data daripada fd0 adalah daripada input standard Ini ditetapkan oleh protokol fast-cgi , dan menerima 856 bait dalam format protokol fastcgi. Bagaimana pula dengan masa

Oleh kerana paket data protokol fastcgi adalah sejajar 8-bait dan terdiri daripada pengepala paket dan badan paket. Dan ia mula-mula akan menghantar paket permintaan, termasuk beberapa id permintaan, versi, jenis dan maklumat lain (pengepala dan badan masing-masing menduduki 8 bait), dan kemudian menghantar paket params untuk lulus get parameter dan pembolehubah persekitaran (header ialah 8 bytes), badan paket menjadi lebih panjang), dan akhirnya paket data params tanpa badan paket dan hanya pengepala paket dihantar, menunjukkan penghujung penghantaran parameter (8 bait pengepala paket). Jadi tiga bacaan pertama digunakan untuk membaca pengepala dan badan paket permintaan, serta pengepala paket params Bacaan keempat adalah untuk membaca data sebenar, dan bacaan terakhir adalah untuk membaca pengepala yang terakhir paket params. Oleh itu, data yang dihantar oleh nginx hendaklah 8+8+8+856+8=896 bait (yang sepadan dengan bait penghantaran nginx di bawah). Ambil perhatian bahawa jika ia adalah mod pos, paket data stdin juga akan dihantar.

3. Tetapkan tidur selama 20s, iaitu tidur(20) dalam program php Selepas itu, kerana proses ditamatkan, tidak akan ada lagi. Program strace juga telah dikeluarkan.

nginx:

Bagaimana untuk menyelesaikan kod status HTTP perkhidmatan nginx+php-fpm 502

1.Terima permintaan kepada penyemak imbas Anda boleh melihat bahawa port pada bahagian penyemak imbas ialah 56434, ip ialah 192.168. 1.105, dan ia telah ditubuhkan Fd yang disambungkan ialah 3.

2. Terima data daripada fd3, protokol http.

3. Cipta soket, fd21, untuk mewujudkan sambungan dengan php.

4. Sambungkan ke fd21, anda boleh melihat bahawa sambungan adalah port 9000 mesin tempatan Di sini nginx dan php-fpm menggunakan kaedah sambungan soket ip Jika nginx dan php-fpm digunakan pada satu mesin , unix boleh dipertimbangkan.

5. Tulis data ke fd21, format protokol cepat-cgi, kita lihat bahawa panjang bertulis ialah 896, yang sepadan dengan panjang yang diterima oleh php di atas.

6. Fungsi recvfrom mengembalikan econnreset (tetapan semula sambungan oleh rakan sebaya) daripada fd21

7. Tulis maklumat ralat ke fd9. Ia boleh disimpulkan bahawa fd9 ialah deskriptor fail log ralat .

8. Tutup sambungan dengan fd21.

9 Tulis 502 gerbang buruk ke fd3, iaitu maklumat yang dikembalikan kepada penyemak imbas.

10 Tulis log akses kepada fd8. Dapat disimpulkan bahawa fd8 ialah deskriptor fail log akses nginx.

Mari sahkan inferens log akses nginx dan log ralat. Anda boleh melihat bahawa ia sememangnya fd8, fd9, dan dalam mod tulis.

Bagaimana untuk menyelesaikan kod status HTTP perkhidmatan nginx+php-fpm 502

Kemudian kita juga boleh melihat pada penghantaran keseluruhan paket rangkaian semasa proses ini:

Tangkap paket melalui tcpdump Ia lebih mudah menggunakan artifak untuk melihatnya.

Oleh kerana saya hanya mahu melihat komunikasi antara nginx dan php, dan saya tahu di atas bahawa port nginx ialah 47039, saya boleh menapis pakej yang sepadan melalui tcp.srcport==47039.

Bagaimana untuk menyelesaikan kod status HTTP perkhidmatan nginx+php-fpm 502

Anda boleh melihat proses interaksi data antara nginx dan php-fpm: 47039->9000 mewujudkan jabat tangan tiga hala, kemudian menghantar data ke 9000, 9000 balasan dengan ack, dan 9000 selepas 3 saat Balas kepada yang pertama. Tak salah pun.

Nota:

syn, setiap sirip menduduki nombor siri

ack, pertama tidak menduduki nombor siri (reqnum dan acknum bagi dua pakej 28 dan 29 ialah yang sama )

Nombor jujukan ditambah 1 untuk setiap bait (896 bait dihantar dalam 29 paket, manakala seq 29 paket ialah 4219146879, dan ack 30 paket ialah 4219147775, yang betul-betul berbeza daripada 896)

Pertama Tiada Balasan diperlukan.

Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan kod status HTTP perkhidmatan nginx+php-fpm 502. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Artikel ini dikembalikan pada:亿速云. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
The Ultimate Showdown: Nginx vs ApacheThe Ultimate Showdown: Nginx vs ApacheApr 18, 2025 am 12:02 AM

Nginx sesuai untuk mengendalikan permintaan serentak yang tinggi, manakala Apache sesuai untuk senario di mana konfigurasi kompleks dan sambungan berfungsi diperlukan. 1.Nginx mengamalkan seni bina yang didorong oleh peristiwa, tidak menyekat, dan sesuai untuk persekitaran yang tinggi. 2. Apache mengamalkan model atau model benang untuk menyediakan ekosistem modul yang kaya yang sesuai untuk keperluan konfigurasi kompleks.

Nginx dalam tindakan: contoh dan aplikasi dunia nyataNginx dalam tindakan: contoh dan aplikasi dunia nyataApr 17, 2025 am 12:18 AM

Nginx boleh digunakan untuk meningkatkan prestasi laman web, keselamatan, dan skalabiliti. 1) Sebagai proksi terbalik dan pengimbang beban, Nginx dapat mengoptimumkan perkhidmatan back-end dan berkongsi lalu lintas. 2) Melalui seni bina yang didorong oleh peristiwa dan tak segerak, Nginx dengan cekap mengendalikan sambungan serentak yang tinggi. 3) Fail konfigurasi membenarkan definisi peraturan yang fleksibel, seperti perkhidmatan fail statik dan mengimbangi beban. 4) Cadangan pengoptimuman termasuk membolehkan pemampatan GZIP, menggunakan cache dan menala proses pekerja.

Unit Nginx: Menyokong bahasa pengaturcaraan yang berbezaUnit Nginx: Menyokong bahasa pengaturcaraan yang berbezaApr 16, 2025 am 12:15 AM

NginxUnit menyokong pelbagai bahasa pengaturcaraan dan dilaksanakan melalui reka bentuk modular. 1. Memuatkan Modul Bahasa: Muatkan modul yang sepadan mengikut fail konfigurasi. 2. Permulaan Permohonan: Jalankan kod aplikasi apabila bahasa panggilan berjalan. 3. Permintaan Pemprosesan: Teruskan permintaan kepada contoh permohonan. 4. Pulangan Respons: Kembalikan respons yang diproses kepada pelanggan.

Memilih antara nginx dan apache: sesuai untuk keperluan andaMemilih antara nginx dan apache: sesuai untuk keperluan andaApr 15, 2025 am 12:04 AM

Nginx dan Apache mempunyai kelebihan dan kekurangan mereka sendiri dan sesuai untuk senario yang berbeza. 1.Nginx sesuai untuk senario penggunaan sumber yang tinggi dan rendah. 2. Apache sesuai untuk senario di mana konfigurasi kompleks dan modul yang kaya diperlukan. Dengan membandingkan ciri teras mereka, perbezaan prestasi, dan amalan terbaik, anda boleh membantu anda memilih perisian pelayan yang paling sesuai dengan keperluan anda.

Cara Memulakan NginxCara Memulakan NginxApr 14, 2025 pm 01:06 PM

Soalan: Bagaimana untuk memulakan nginx? Jawapan: Pasang Nginx Startup Nginx Verification Nginx adalah nginx mula meneroka pilihan permulaan lain secara automatik Mula nginx

Cara memeriksa sama ada nginx dimulakanCara memeriksa sama ada nginx dimulakanApr 14, 2025 pm 01:03 PM

Bagaimana untuk mengesahkan sama ada nginx dimulakan: 1. Gunakan baris arahan: status sistem sistem nginx (linux/unix), netstat -ano | Findstr 80 (Windows); 2. Periksa sama ada port 80 dibuka; 3. Semak mesej permulaan Nginx dalam log sistem; 4. Gunakan alat pihak ketiga, seperti Nagios, Zabbix, dan Icinga.

Cara menutup nginxCara menutup nginxApr 14, 2025 pm 01:00 PM

Untuk menutup perkhidmatan nginx, ikuti langkah -langkah berikut: Tentukan jenis pemasangan: Red Hat/CentOS (status SistemCTL nginx) atau debian/ubuntu (status nginx) menghentikan perkhidmatan: Red Hat/CentOS (SystemCtl Stop Nginx) atau Debian/Ubuntu (perkhidmatan Nginx) (Syst

Cara Mengkonfigurasi Nginx di WindowsCara Mengkonfigurasi Nginx di WindowsApr 14, 2025 pm 12:57 PM

Bagaimana cara mengkonfigurasi nginx di Windows? Pasang Nginx dan buat konfigurasi hos maya. Ubah suai fail konfigurasi utama dan sertakan konfigurasi hos maya. Mulakan atau Muat semula Nginx. Uji konfigurasi dan lihat laman web. Selektif membolehkan SSL dan mengkonfigurasi sijil SSL. Selektif tetapkan firewall untuk membolehkan trafik port 80 dan 443.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
Akan R.E.P.O. Ada Crossplay?
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

Versi Mac WebStorm

Versi Mac WebStorm

Alat pembangunan JavaScript yang berguna

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)