Penghasilan Semula Senario
Di bawah saya akan menggunakan nginx asli untuk menghasilkan semula proses ini pada mesin maya saya dengan fedora26 dipasang Versi nginx yang saya gunakan ialah 1.13.4 terbaharu
Nginx mula pertama.
Anda dapat melihat bahawa kedua-dua tuan dan pekerja sudah berjalan.
Kemudian kami menghantar isyarat sigusr2 kepada master Apabila teras nginx menerima isyarat ini, kemas kini panas akan dicetuskan.
Anda dapat melihat bahawa tuan baru dan pekerja yang dicabang oleh tuan sudah berjalan pada masa ini, kami kemudian menghantar isyarat sigwinch kepada tuan lama, dan tuan lama menerima ini Selepas isyarat, sigquit akan dihantar kepada pekerjanya, jadi proses pekerja tuan lama akan keluar:
Pada masa ini, hanya tuan lama , tuan baru dan tuan baru ditinggalkan Pekerja tuan sedang berjalan, yang serupa dengan operasi dalam talian pada masa itu.
Kemudian kita menggunakan arahan berhenti:
Kita akan dapati tuan baru dan pekerjanya telah keluar, sementara tuan lama masih berjalan Dan pekerja yang dihasilkan. Inilah keadaan dalam talian pada masa itu.
Sebenarnya, fenomena ini berkaitan dengan reka bentuk nginx itu sendiri: apabila tuan lama bersedia untuk memotong tuan baharu, ia akan menamakan semula fail nginx.pid kepada nginx.pid.oldbin, dan kemudian menggunakan Master baharu daripada fork akan mencipta nginx.pid baharu Fail ini akan merekodkan pid master baharu. nginx percaya bahawa selepas kemas kini panas selesai, misi tuan lama hampir tamat, dan ia akan keluar pada bila-bila masa, jadi semua operasi berikutnya harus diambil alih oleh tuan baru. Sudah tentu, adalah tidak sah untuk mencuba kemas kini panas yang lain dengan menghantar sigusr2 kepada master baru tanpa master lama keluar dari master baru hanya akan mengabaikan isyarat ini dan meneruskan kerjanya sendiri.
Analisis Masalah
Apa yang lebih malang ialah jadual lua yang kami nyatakan di atas, fail lua yang mentakrifkannya, telah dimuatkan ke dalam ingatan oleh luajit seawal apabila cangkuk init_by_lua dijalankan. Dan disusun ke dalam kod bait, maka jelaslah tuan lama tidak boleh mempunyai jadual lua ini, kerana bahagian kod lua yang dimuatkannya ialah versi lama.
Kod Lua yang mengindeks jadual tidak digunakan semasa init_by_lua Kod ini dimuatkan dalam proses pekerja Pada masa ini, kod dalam direktori projek adalah yang terkini, jadi kod pekerja yang terkini dimuatkan. Jika proses pekerja ini mengendalikan permintaan yang berkaitan, ralat masa jalan Lua akan berlaku dan manifestasi luaran akan menjadi http 500 yang sepadan.
Selepas menyerap pelajaran ini, kami perlu menutup perkhidmatan nginx kami dengan lebih rasional. Oleh itu, skrip permulaan dan penutupan perkhidmatan nginx yang lebih munasabah diperlukan Sesetengah skrip yang beredar di Internet tidak menangani fenomena ini.
Kod ini dipetik daripada nginx official /etc/init.d/nginx .
set isyarat nginx
Seterusnya kami akan menyusun set isyarat nginx secara menyeluruh Butiran kod sumber tidak akan terlibat di sini. Pelajar yang berminat boleh membaca sendiri kod sumber yang berkaitan.
Kami mempunyai dua cara untuk menghantar isyarat kepada proses induk, satu adalah untuk beroperasi melalui isyarat nginx -s, dan satu lagi adalah untuk menghantarnya secara manual melalui arahan bunuh.
Prinsip kaedah pertama ialah menjana proses baharu, yang mendapat pid proses induk melalui fail nginx.pid, kemudian menghantar isyarat yang sepadan kepada induk, dan kemudian keluar Proses ini dipanggil pemberi isyarat.
Cara kedua memerlukan kita memahami pemetaan isyarat nginx -s kepada isyarat sebenar. Jadual berikut ialah hubungan pemetaan mereka:
isyarat operasi
reload sighup
buka semula sigusr1
stop sigterm
quit sigquit
hot update sigusr2 & sigwinch & sigquit
stop vs quit
stop menghantar isyarat sigterm untuk menunjukkan keluar paksa, dan quit menghantar sigquit untuk menunjukkan keluar yang anggun. Perbezaan khusus ialah selepas proses pekerja menerima mesej sigquit (perhatikan bahawa isyarat tidak dihantar terus, jadi mesej digunakan sebaliknya), ia akan menutup soket mendengar, menutup sambungan terbiar yang sedang terbiar (sambungan yang boleh didahulukan ), dan kemudian memprosesnya terlebih dahulu Semua acara pemasa keluar pada penghujungnya. Melainkan terdapat keadaan khusus, berhenti harus digunakan dan bukannya berhenti.
muat semula
Selepas proses induk menerima sighup, ia akan menghuraikan semula fail konfigurasi, memohon memori dikongsi dan satu siri tugas lain, dan kemudian menjana sekumpulan pekerja baharu proses, dan akhirnya menghantarnya kepada yang lama Proses pekerja menghantar mesej yang sepadan dengan sigquit, dan akhirnya operasi restart direalisasikan dengan lancar.
buka semula
Selepas proses induk menerima sigusr1, ia akan membuka semula semua fail yang terbuka (seperti log), dan kemudian menghantar maklumat sigusr1 kepada setiap proses pekerja Selepas proses pekerja menerima isyarat, ia akan melakukan operasi yang sama. Buka semula boleh digunakan untuk pemotongan log Contohnya, nginx secara rasmi menyediakan penyelesaian:
Tidur 1 diperlukan di sini kerana proses induk menghantar mesej sigusr1 kepada proses pekerja. Terdapat tetingkap masa antara membuka semula akses.log Pada masa ini, proses pekerja masih menulis log ke akses fail.log.0. Dengan tidur 1s, integriti maklumat log access.log.0 dipastikan (jika pemampatan dilakukan terus tanpa tidur, kehilangan log mungkin berlaku).
kemas kini panas
Kadangkala kita perlu melakukan kemas kini panas binari nginx menyertakan fungsi ini semasa mereka bentuk, tetapi ia tidak boleh diselesaikan melalui baris arahan yang disediakan oleh nginx .
Melalui masalah berulang di atas, anda sepatutnya memahami cara melakukan kemas kini panas Kita perlu menghantar sigusr2 ke proses induk semasa, dan kemudian induk akan menamakan nginx.pid kepada nginx.pid.oldbin. Kemudian buat proses baharu Proses baharu akan menggunakan panggilan sistem execve untuk menggantikan imej proses semasa dengan fail nginx elf baharu dan menjadi proses induk baharu. Selepas proses induk baharu dimulakan, ia akan melaksanakan penghuraian fail konfigurasi dan operasi lain, dan kemudian menghentikan proses pekerja baharu untuk mula bekerja.
Kemudian kami menghantar isyarat sigwinch kepada tuan lama, dan kemudian proses tuan lama akan menghantar mesej sigquit kepada proses pekerjanya, menyebabkan proses pekerja keluar. Menghantar sigwinch dan sigquit ke proses induk akan menyebabkan proses pekerja terkeluar, tetapi yang pertama tidak akan menyebabkan proses induk terkeluar juga.
Akhir sekali, jika kami merasakan bahawa proses tuan lama telah menyelesaikan misinya, kami boleh menghantar isyarat sigquit untuk membiarkannya keluar.
Bagaimana proses pekerja mengendalikan mesej isyarat daripada tuan
Malah, proses induk berkomunikasi dengan proses pekerja, bukan dengan menggunakan fungsi bunuh, tetapi dengan menggunakan saluran nginx yang dilaksanakan melalui saluran paip, proses induk Tulis maklumat (seperti maklumat isyarat) ke satu hujung paip, dan proses pekerja menerima maklumat dari hujung yang satu lagi Acara saluran nginx ditambahkan pada penjadual acara (seperti epoll, kqueue) apabila proses pekerja baru sahaja bermula, jadi apabila terdapat Apabila data dihantar daripada induk, ia boleh dimaklumkan oleh penjadual acara.
Terdapat sebab mengapa nginx direka bentuk dengan cara ini Sebagai pelayan proksi terbalik yang sangat baik, nginx mengejar prestasi tinggi yang melampau, dan pengendali isyarat akan mengganggu perjalanan proses pekerja, menyebabkan semua acara digantung selama. tempoh masa tetingkap masa, yang mempunyai kehilangan prestasi tertentu.
Ramai orang mungkin berfikir bahawa apabila proses induk menghantar maklumat kepada proses pekerja, proses pekerja akan bertindak balas dengan serta-merta dengan operasi yang sepadan Namun, proses pekerja sentiasa sibuk memproses acara rangkaian dan pemasa . Selepas memanggil pengendali acara saluran nginx, nginx hanya memproses beberapa bendera. Tindakan ini sebenarnya dilaksanakan selepas pusingan penjadualan acara selesai. Oleh itu, terdapat tetingkap masa di antaranya Terutama apabila perniagaan adalah kompleks dan trafik yang besar, tetingkap ini mungkin diperbesarkan Ini sebabnya pelan pemotongan log yang disediakan oleh nginx secara rasmi memerlukan tidur 1s.
Sudah tentu, kami juga boleh memintas proses induk dan menghantar isyarat terus kepada proses pekerja Isyarat yang boleh dikendalikan oleh pekerja termasuk
kesan isyarat
tanda keluar paksa
. sigterm force exit
sigquit anggun keluar
sigusr1 membuka semula fail
Atas ialah kandungan terperinci analisis contoh set isyarat nginx. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Mula perkhidmatan nginx pada linux dan macOS: input terminal: perkhidmatan sudo nginx mula melihat status perkhidmatan: perkhidmatan sudo nginx status mengesahkan fail konfigurasi:/etc/nginx atau/usr/local/etc/nginx start nginx Service pada Windows: Mula menu & gt; Run & gt; Input: Services.msc Cari Perkhidmatan "Nginx" & gt; Klik kanan & gt; Mula melihat status perkhidmatan: & quo

Tutup Firewall Nginx: Buka fail konfigurasi utama nginx /etc/nginx/nginx.conf. Padam Arahan Konfigurasi Firewall di Blok HTTP. Simpan fail konfigurasi dan mulakan semula nginx.

Untuk menyediakan SSL menggunakan NGINX, anda perlu: Dapatkan sijil SSL. Buat fail konfigurasi Nginx dan tentukan laluan sijil. Dayakan SSL. Tambahkan nama pelayan. Mulakan semula nginx.

Apabila anda mengakses pelayan web NGINX, anda menghadapi ralat 404, menunjukkan bahawa pelayan tidak dapat mencari sumber yang diminta. Anda boleh menyelesaikannya melalui langkah -langkah berikut: 1. Periksa sama ada fail itu wujud dan jalannya betul; 2. Periksa kebenaran fail dan tukar kepada 644 atau 755; 3. Semak konfigurasi Nginx untuk memastikan bahawa direktori root ditetapkan dengan betul dan tidak ada konfigurasi yang bertentangan; 4. Periksa log ralat untuk maklumat lanjut; 5. Periksa tetapan firewall dan buka pelabuhan yang sesuai; 6. Gunakan pelayar atau pelanggan yang berbeza untuk mengakses laman web; 7. Mulakan semula nginx. Jika tiada langkah ini menyelesaikan masalah ini, sila dapatkan sokongan teknikal profesional.

Kaedah Tutup Nginx: 1) Gunakan SystemCTL: SUDO Systemctl Stop Nginx; 2) Gunakan Perkhidmatan: Sudo Service Nginx Stop; 3) Gunakan Supervisorctl: Sudo Supervisorctl Stop Nginx; 4) Tutup secara manual: nginx -s berhenti.

Nginx menyedari pengimbangan beban melalui kaedah pengundian, kaedah pengundian berwajaran, kaedah sambungan minimum, kaedah hashing IP, kaedah hashing nama dan kaedah rawak. Pilihan algoritma yang sesuai bergantung kepada keperluan aplikasi. Sebagai contoh, aplikasi tanpa stateless dikenakan untuk mengundi, aplikasi negara dikenakan untuk kaedah sambungan minimum, dan aplikasi yang memerlukan pertalian sesi berlaku untuk hashing IP atau hashing nama.

Anda boleh menutup perkhidmatan nginx dengan mengikuti langkah -langkah: Gunakan perintah SystemCTL: Systemctl Stop Nginx Gunakan arahan perkhidmatan: perkhidmatan nginx berhenti menggunakan perintah pkill: pkill -f nginx berhenti secara manual nginx: cari garis pid di nginx.conf dan gunakan bunuh -int & lt; pid & gt; perintah

Ralat NGINX 502 menunjukkan bahawa pelayan tidak dapat memproses permintaan itu, kerana pelayan mungkin sibuk atau sementara tidak tersedia. Penyelesaian termasuk: 1. Semak sumber pelayan; 2. Mulakan semula nginx; 3. Periksa log ralat; 4. Semak pelayan back-end; 5. Laraskan konfigurasi Nginx; 6. Menaik taraf Nginx; 7. Hubungi penyedia tuan rumah.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

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

EditPlus versi Cina retak
Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

Dreamweaver CS6
Alat pembangunan web visual

MantisBT
Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

Pelayar Peperiksaan Selamat
Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.