Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  Bagaimana untuk melaksanakan mod pecutan Nginx+PHP+FastCGI

Bagaimana untuk melaksanakan mod pecutan Nginx+PHP+FastCGI

WBOY
WBOYke hadapan
2023-05-14 16:34:12796semak imbas

1. Proses capaian pengguna ke halaman web PHP dinamik

Penyemak imbas pengguna memulakan akses ke halaman web: http://192.168.1.103/index.php

Pengguna dan pelayan nginx melakukan jabat tangan tiga hala untuk sambungan TCP (abaikan dasar kawalan akses termasuk dasar kawalan akses nginx, tembok api nginx dan dasar kawalan akses lain)

Langkah 1: Pengguna menghantar permintaan http ke pelayan nginx

Langkah 2: nginx akan menilai permintaan berdasarkan URI dan akhiran yang dilawati oleh pengguna

1. Contohnya, jika pengguna mengakses index.php, nginx akan memadankannya berdasarkan lokasi dalam fail konfigurasi, contohnya:

[email protected]:/data/web# cat /etc/nginx/conf.d/blog.conf  server {     root /data/web/blog/;     index index.html index.htm;     server_name www.fwait.com;     location / {         try_files $uri $uri/ /index.html;     }     location /blog/ {         #alias /usr/share/doc/;         auth_basic "authorized users only";         auth_basic_user_file /etc/nginx/passwd.conf;         #autoindex on;         allow 192.168.1.103;         deny all;     }     location ~ \.php$ {         include /etc/nginx/fastcgi_params;         fastcgi_intercept_errors on;         fastcgi_pass 127.0.0.1:9000;     } }<br>

Jika pengguna mengakses index.php, ia akan sepadan dengan lokasi ~ .php$ Ini bermakna sumber yang diakses oleh pengguna melalui URI dipadankan dengan cara yang sensitif saiz, dan sumber yang diakses berakhir dengan .php.

Selepas nginx memadankan lokasi tertentu mengikut sumber yang diminta oleh pengguna, ia akan melaksanakan tindakan yang sepadan dengan lokasi tersebut. Maksud tindakan di lokasi ialah:

sertakan /etc/nginx/fastcgi_params; #Menunjukkan bahawa nginx akan memanggil antara muka fastcgi

fastcgi_intercept_errors on; #Indicates mendayakan fastcgi interrupt and error recording

fastcgi_pass 127.0.0.1:9000; # Menunjukkan bahawa nginx menghantar sumber yang diminta oleh pengguna ke 127.0.0.1:9000 untuk analisis melalui fastcgi_pass Pelayan penghuraian skrip nginx dan php di sini berada pada mesin yang sama, jadi 127.0.0.1 mewakili:9. Ia adalah pelayan parsing skrip php tempatan.

Mengikut konfigurasi pelayan nginx, dapat dilihat bahawa pengguna mengakses sumber PHP dinamik, dan nginx akan memanggil program penghuraian skrip berkaitan PHP untuk menghuraikan sumber yang diakses oleh pengguna.

Langkah 3: Seperti yang dapat dilihat dari langkah kedua, pengguna meminta kandungan dinamik nginx akan menyerahkan permintaan kepada klien fastcgi dan menghantar permintaan pengguna ke php-fpm melalui fastcgi_pass

Jika pengguna mengakses sumber statik, mudah sahaja nginx mengembalikan sumber statik yang diminta oleh pengguna kepada pengguna.

Langkah 4: Selepas fastcgi_pass menyerahkan sumber dinamik kepada php-fpm, php-fpm akan memindahkan sumber kepada pembalut pelayan parsing skrip php

Bagaimana untuk melaksanakan mod pecutan Nginx+PHP+FastCGI

Bagaimana untuk melaksanakan mod pecutan Nginx+PHP+FastCGI

Langkah 5: Selepas pembungkus menerima permintaan yang dipindahkan daripada php-fpm, pembungkus akan menghasilkan utas baharu untuk memanggil pelayan parsing atur cara dinamik php

Jika pengguna meminta untuk membaca pangkalan data MySQL, sebagai contoh, operasi membaca pangkalan data akan dicetuskan

Jika pengguna meminta imej/lampiran, dsb., PHP akan mencetuskan pertanyaan kepada pelayan storan bahagian belakang seperti kluster storan yang disimpan melalui NFS

Langkah 6: PHP akan mengembalikan hasil pertanyaan kepada nginx

Langkah 7: nginx membina mesej respons dan mengembalikan hasilnya kepada pengguna

Ini hanyalah satu jenis nginx Permintaan pengguna dan pemulangan hasil permintaan pengguna dilakukan secara tidak segerak, iaitu, sumber yang diminta oleh pengguna dipindahkan dalam nginx boleh disegerakkan, iaitu, sumber yang dihuraikan dikembalikan secara langsung oleh pelayan Bagi pengguna, tidak perlu membuat pemindahan dalam nginx.

2. Soalan berkaitan

1. Adakah setiap permintaan pengguna untuk sumber dinamik perlu mencetuskan proses penghuraian sumber dinamik yang lengkap?

Tidak, terdapat dua cara untuk menyelesaikan masalah ini:

Pertama, dayakan fungsi caching nginx itu sendiri untuk menyimpan hasil penghuraian sumber dinamik Pada kali seterusnya pengguna mengakses sumber yang sepadan, nginx akan melakukan pertanyaan cache ini Jika pertanyaan berjaya, sumber statik selepas sumber dinamik akan dihuraikan dikembalikan terus kepada pengguna;

Kedua, gunakan mesin cache pada bahagian belakang nginx, seperti menggunakan kluster cache varnis ke sumber cache Sumber yang diminta oleh pengguna boleh dicari pada kluster cache terlebih dahulu 2. Adakah boleh menggunakan nginx untuk caching? Bergantung pada keadaan sebenar, jika nginx bukan halangan dalam keseluruhan seni bina web, nginx boleh digunakan untuk caching, tetapi ini tidak disyorkan kerana nginx adalah satu-satunya cara untuk permintaan pengguna dan respons kepada permintaan pengguna Jika nginx muncul Bottleneck, tidak kira betapa baiknya prestasi komponen belakang lain seperti kelompok storan, tidak disyorkan untuk mendayakan fungsi caching nginx dalam penggunaan sebenar (apabila nginx digunakan sebagai pelayan http). Kerana mendayakan fungsi cache nginx akan mengurangkan prestasi nginx dan menggunakan sumber perkakasan pelayan yang sepadan tempat nginx digunakan.

3. Jika gambar digunakan untuk mewakili hubungan antara nginx fastcgi wrapper php

Bagaimana untuk melaksanakan mod pecutan Nginx+PHP+FastCGI 4.Apa sebenarnya fastcgi

Nama penuh CGI ialah Antara Muka Gerbang Biasa

Alat yang digunakan untuk komunikasi perkhidmatan program pada perkhidmatan HTTP mesti dijalankan pada pelayan rangkaian.

Kaedah antara muka CGI tradisional mempunyai prestasi yang lemah kerana setiap kali pelayan HTTP menghadapi program dinamik, ia perlu memulakan semula penghurai untuk melakukan penghuraian, dan kemudian hasilnya dikembalikan kepada pelayan HTTP. Ini hampir mustahil apabila berhadapan dengan konkurensi yang tinggi, jadi FastCGI dilahirkan. Selain itu, keselamatan kaedah antara muka CGI tradisional juga sangat lemah

一个可伸缩地。高速地在HTTP服务器和动态脚本语言间通信的接口

接口在linux下是socket(这个socket可以是文件socket也可以是ip socket)

主要优点把动态语言和HTTP服务器分离开来。多数流行的HTTP服务器都支持FsatCGI包括Apache/Nginx/lighttpd等

支持语言比较流行的是PHP,接口方式采用C/S架构,可以将HTTP服务器和脚本解析器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。

当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。

5.具体的nginx + php的nginx相关配置

[email protected]:/data/web# cat /etc/nginx/nginx.conf|egrep -v "#|^$" user www-data; worker_processes 4; pid /var/run/nginx.pid; events {     worker_connections 768; } http {     sendfile on;     tcp_nopush on;     tcp_nodelay on;     keepalive_timeout 65;     types_hash_max_size 2048;     include /etc/nginx/mime.types;     default_type application/octet-stream;     access_log /var/log/nginx/access.log;     error_log /var/log/nginx/error.log;     gzip on;     gzip_disable "msie6";     include /etc/nginx/conf.d/*.conf;     include /etc/nginx/sites-enabled/*; } [email protected]:/data/web#<br>
[email protected]:/data/web# cat /etc/nginx/conf.d/blog.conf server {     root /data/web/blog/;     index index.html index.htm;     server_name www.fwait.com;     location / {         try_files $uri $uri/ /index.html;     }     location /blog/ {         #alias /usr/share/doc/;         auth_basic "authorized users only";         auth_basic_user_file /etc/nginx/passwd.conf;         #autoindex on;         allow 192.168.1.103;         deny all;     }     location ~ \.php$ {         #include /usr/local/etc/nginx/fastcgi.conf;         include /etc/nginx/fastcgi_params;         fastcgi_intercept_errors on;         fastcgi_pass 127.0.0.1:9000;     } } [email protected]:/data/web#<br>

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan mod pecutan Nginx+PHP+FastCGI. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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