Rumah >pembangunan bahagian belakang >tutorial php >Mari kita bincangkan tentang mekanisme komunikasi antara Nginx dan php-fpm dan lihat bagaimana untuk mengkonfigurasinya?

Mari kita bincangkan tentang mekanisme komunikasi antara Nginx dan php-fpm dan lihat bagaimana untuk mengkonfigurasinya?

青灯夜游
青灯夜游ke hadapan
2022-03-08 10:38:176016semak imbas

Artikel ini akan membincangkan mekanisme komunikasi antara Nginx dan php-fpm, memperkenalkan perbezaan antara kedua-dua kaedah komunikasi, lihat cara mengkonfigurasi gabungan Nginx dan php-fpm, dan menganalisis cara memilih kaedah komunikasi dalam permohonan. Semoga ia dapat membantu semua orang!

Mari kita bincangkan tentang mekanisme komunikasi antara Nginx dan php-fpm dan lihat bagaimana untuk mengkonfigurasinya?

Pengenalan kepada PHP-FPM

Protokol CGI dan protokol FastCGI

Setiap bahasa dinamik (PHP, Python dsb.) fail kod perlu melepasi parser yang sepadan untuk diiktiraf oleh pelayan, dan protokol CGI digunakan untuk membolehkan jurubahasa dan pelayan berkomunikasi antara satu sama lain. Penghuraian fail PHP pada pelayan memerlukan penggunaan penterjemah PHP, ditambah dengan protokol CGI yang sepadan, supaya pelayan boleh menghuraikan fail PHP.

Memandangkan mekanisme CGI memerlukan proses CGI memotong setiap kali permintaan diproses, dan kemudian mematikan proses selepas permintaan selesai, ia adalah pembaziran sumber dalam aplikasi praktikal, jadi versi CGI yang dipertingkatkan, FastCGI, muncul FastCGI dalam permintaan Selepas pemprosesan, proses tidak akan dimatikan, tetapi berbilang permintaan akan terus diproses, yang meningkatkan kecekapan.

Apakah itu PHP-FPM

PHP-FPM ialah Pengurus Proses PHP-FastCGI Ia adalah pelaksanaan FastCGI dan menyediakan fungsi pengurusan proses. Proses ini merangkumi dua jenis: proses induk dan proses pekerja hanya terdapat satu proses induk, yang bertanggungjawab untuk mendengar port dan menerima permintaan daripada pelayan, manakala pada umumnya terdapat beberapa proses pekerja (nombor khusus dikonfigurasikan mengikut sebenar. keperluan), dan setiap proses akan mempunyai satu tertanam di dalamnya. Jurubahasa PHP adalah tempat kod itu sebenarnya dilaksanakan.

Mekanisme komunikasi Nginx dan php-fpm

Apabila kami melawati tapak web (seperti www.test.com), aliran pemprosesan adalah seperti berikut:

  www.test.com
        |
        |
      Nginx
        |
        |
路由到 www.test.com/index.php
        |
        |
加载 nginx 的 fast-cgi 模块
        |
        |
fast-cgi 监听 127.0.0.1:9000 地址
        |
        |
www.test.com/index.php 请求到达 127.0.0.1:9000
        |
        |
     等待处理...

Gabungan Nginx dan php-fpm

Di Linux, komunikasi antara nginx dan php-fpm mempunyai dua kaedah: soket tcp dan soket unix.

Kelebihan soket tcp ialah ia boleh merentas pelayan Kaedah ini hanya boleh digunakan apabila nginx dan php-fpm tidak berada pada mesin yang sama.

Soket Unix, juga dipanggil soket IPC (komunikasi antara proses), digunakan untuk melaksanakan komunikasi antara proses pada hos yang sama Kaedah ini memerlukan pengisian lokasi fail soket php-fpm dalam konfigurasi nginx fail.

Proses penghantaran data kedua-dua kaedah ditunjukkan dalam rajah di bawah:

Perbezaan antara keduanya:

Disebabkan oleh soket Unix Tidak perlu melalui susunan protokol rangkaian, pembungkusan dan pembongkaran, mengira jumlah semak, mengekalkan nombor jujukan dan respons, dsb. Ia hanya menyalin data lapisan aplikasi dari satu proses ke proses yang lain. Oleh itu, kecekapannya lebih tinggi daripada soket tcp, yang boleh mengurangkan overhed tcp yang tidak perlu. Walau bagaimanapun, soket unix tidak stabil apabila konkurensi tinggi Apabila bilangan sambungan meletup, sejumlah besar cache jangka panjang akan dijana Tanpa sokongan protokol berorientasikan sambungan, paket data yang besar boleh menjadi salah tanpa mengembalikannya pengecualian. Protokol berorientasikan sambungan seperti tcp boleh memastikan ketepatan dan integriti komunikasi dengan lebih baik.

Untuk menggabungkan Nginx dengan php-fpm, anda hanya perlu membuat tetapan dalam fail konfigurasi masing-masing:

1) Konfigurasi dalam Nginx

Ambil komunikasi soket tcp sebagai contoh

server {
    listen       80; #监听 80 端口,接收http请求
    server_name  www.test.com; #就是网站地址
    root /usr/local/etc/nginx/www/huxintong_admin; # 准备存放代码工程的路径
    #路由到网站根目录 www.test.com 时候的处理
    location / {
        index index.php; #跳转到 www.test.com/index.php
        autoindex on;
    }   

    #当请求网站下 php 文件的时候,反向代理到 php-fpm
    location ~ \.php$ {
        include /usr/local/etc/nginx/fastcgi.conf; #加载 nginx 的 fastcgi 模块
        fastcgi_intercept_errors on;
        fastcgi_pass   127.0.0.1:9000; # tcp 方式,php-fpm 监听的 IP 地址和端口
       # fasrcgi_pass /usr/run/php-fpm.sock # unix socket 连接方式
    }

}

2) Konfigurasi php-fpm

listen = 127.0.0.1:9000
# 或者下面这样
listen = /var/run/php-fpm.sock
Perhatikan bahawa apabila menggunakan soket unix untuk menyambung, memandangkan fail soket pada dasarnya adalah fail, terdapat masalah kawalan kebenaran, jadi Anda perlu memberi perhatian kepada kebenaran proses nginx dan kebenaran php-fpm, jika tidak, anda akan digesa untuk mengakses tanpa kebenaran. (Tetapkan pengguna dalam fail konfigurasi masing-masing)

Komunikasi antara php-fpm dan nginx boleh diselesaikan melalui konfigurasi di atas.

Pemilihan dalam aplikasi

Jika nginx dan php-fpm berjalan pada pelayan yang sama, dan konkurensinya tidak tinggi (tidak lebih daripada 1000), pilih soket unix untuk meningkatkan kecekapan Komunikasi nginx dengan php-fpm.
Jika anda menghadapi perniagaan serentak yang tinggi, pertimbangkan untuk menggunakan soket tcp yang lebih dipercayai untuk mengekalkan kecekapan melalui kaedah operasi dan penyelenggaraan seperti pengimbangan beban dan pengoptimuman kernel.

Jika konkurensi tinggi tetapi anda masih mahu menggunakan soket unix, anda boleh meningkatkan kestabilan soket unix melalui kaedah berikut.

1) Letakkan fail sock dalam direktori /dev/shm Letakkan fail sock dalam memori dalam direktori ini, supaya memori boleh dibaca dan ditulis dengan lebih cepat.

2) Tingkatkan tunggakan

Bit lalai tunggakan ialah 128, 1024. Nilai ini paling baik ditukar kepada QPS biasa anda sendiri dan konfigurasi adalah seperti berikut.

fail nginx.conf

server {
        listen 80 default backlog = 1024;
       }

fail php-fpm.conf

listen.backlog = 1024

3) Tambah fail sock dan instance php-fpm

Cipta fail sock baharu dalam /dev/shm, muatkan permintaan baki kepada dua fail sock melalui modul huluan dalam nginx, dan petakan dua fail sock kepada dua set contoh php-fpm.

Pembelajaran yang disyorkan: "Tutorial Video PHP"

Atas ialah kandungan terperinci Mari kita bincangkan tentang mekanisme komunikasi antara Nginx dan php-fpm dan lihat bagaimana untuk mengkonfigurasinya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:segmentfault.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam