Cet article vous donnera une introduction détaillée à PHP-FMP. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.
$_POST,$_GET,$_SERVER
? À quel format doit-on se référer pour assembler les données ? En fait, nous savons que chaque langage dynamique, c'est-à-dire un langage interprété, a besoin d'un analyseur correspondant pour être reconnu par le serveur (ici, le serveur web), mais l'interprète et le serveur doivent suivre certain Ce n'est que via ce protocole que les deux parties peuvent communiquer normalement, alors ce protocole est le protocole CGI, mais le mécanisme de CGI est que chaque fois qu'il répond à une requête Web, un nouveau processus de traitement sera créé et initialisé, et ce processus sera tué lorsque la demande sera terminée. Ensuite, chaque requête doit effectuer ces trois étapes : Créer->Initialiser->Fin. En fait, ce processus gaspille non seulement des ressources, mais est également très inefficace. Ce qu'il faut faire? FastCGI est apparu en réponse à l'époque. En tant que version améliorée de CGI, FastCGI démarrera un processus de service résident. Ce processus n'a pas besoin de gérer le cycle de vie, évitant ainsi la création et l'arrêt répétés du processus. il n'est pas nécessaire de lire plusieurs fois la variable d'environnement. Chaque fois qu'il y a une requête Web, le gestionnaire FastCGI, c'est-à-dire le processus de service résident, démarre le processus d'interprétation CGI
<.>netstat -nap | grep master的进程号
location ~ [^/]\.php(/|$) { try_files $uri =404; fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index index.php; include fastcgi.conf; }
Je pense que tout le monde peut comprendre cette information /tmp/php-cgi.sock est le pont. entre php et nginx En même temps, nous avons également vu
, Jetons un coup d'œil àroot@6d05153a8988:/usr/local/nginx/conf# cat fastcgi.conf fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param REQUEST_SCHEME $scheme; fastcgi_param HTTPS $https if_not_empty; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; # PHP only, required if PHP was built with --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200; fastcgi_param PHP_ADMIN_VALUE "open_basedir=NULL";
include fastcgi.conf
Nous en avons vu quelques-uns familiers, tels que REMOTE_ADDR, REQUEST_URI. via $_SERVER est ce qui est spécifié dans ce fichier de configuration Jetons un coup d'œil au fichier de configuration de php-fmp (veuillez faire attention aux commentaires à l'intérieur, je ne l'expliquerai pas)
root@6d05153a8988:/usr/local/php/etc# cat php-fpm.conf [global] pid = /usr/local/php/var/run/php-fpm.pid error_log = /usr/local/php/var/log/php-fpm.log log_level = notice [www] listen = /tmp/php-cgi.sock listen.backlog = -1 listen.allowed_clients = 127.0.0.1 listen.owner = www listen.group = www listen.mode = 0666 user = www group = www # 如何控制子进程,选项有static和dynamic #区别: #如果dm设置为 static,那么其实只有pm.max_children这个参数生效。系统会开#启设置数量的php-fpm进程。 #如果dm设置为 dynamic,那么pm.max_children参数失效,后面3个参数生效。 #系统会在php-fpm运行开始 的时候启动pm.start_servers个php-fpm进程, #然后根据系统的需求动态在pm.min_spare_servers和pm.max_spare_servers之#间调整php-fpm进程数。 pm = dynamic # 静态方式下开启的php-fpm进程数量 pm.max_children = 20 # 动态方式下的起始php-fpm进程数量 pm.start_servers = 10 # 动态方式下的最小php-fpm进程数 pm.min_spare_servers = 10 # 动态方式下的最大php-fpm进程数量 pm.max_spare_servers = 20 # php-fpm子进程能处理的最大请求数 pm.max_requests = 1024 pm.process_idle_timeout = 10s request_terminate_timeout = 100 request_slowlog_timeout = 0 slowlog = var/log/slow.log
启动: /usr/local/php/sbin/php-fpm
查看进程数: ps aux | grep -c php-fpm
查看mater进程号:ps aux|grep 'php-fpm: master'|grep -v grep|awk '{print $2}'
或者cat /usr/local/php/var/run/php-fpm.pid
# 强制关闭 pkill php-fpm kill -INT `cat /usr/local/php/var/run/php-fpm.pid` kill -INT [pid] # 平滑重启 其实就是通过创建新的进程使 php.ini 生效 kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid` kill -USR2 [pid]
至此,php-fpm 算是说完了,其实通过上面的解说,大家也会明白一个问题,为什么lnmp 承受的并发比lamp高,除了nginx的高性能之外,php-fpm 是不是也是其中的一个原因呢?
推荐学习:《PHP视频教程》
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!