1、nginx的worker进程直接管理每一个要求到nginx的网络要求。
2、对付php而言,由于在全体网络要求的过程中php是一个cgi程序的角色,以是采取名为php-fpm的进程管理程序来对这些被要求的php程序进行管理。php-fpm程序也犹如nginx一样,须要监听端口,并且有master和worker进程。worker进程直接管理每一个php进程。
3、关于fastcgi:fastcgi是一种进程管理器,管理cgi进程。市情上有多种实现了fastcgi功能的进程管理器,php-fpm便是个中的一种。再提一点,php-fpm作为一种fast-cgi进程管理做事,会监听端口,一样平常默认监听9000端口,并且是监听本机,也便是只吸收来自本机的端口要求,以是我们常日输入命令 netstat -nlpt|grep php-fpm 会得到:
tcp 0 0 127.0.0.1:9000 0.0.0.0: LISTEN 1057/php-fpm
这里的127.0.0.1:9000 便是监听本机9000端口的意思。
4、关于fastcgi的配置文件,目前fastcgi的配置文件一样平常放在nginx.conf同级目录下,配置文件形式,一样平常有两种:fastcgi.conf 和 fastcgi_params。不同的nginx版本会有不同的配置文件,这两个配置文件有一个非常主要的差异:fastcgi_parames文件中短缺下列配置:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
我们可以打开fastcgi_parames文件加上上述行,也可以在要利用配置的地方动态添加。使得该配置生效。
5、当须要处理php要求时,nginx的worker进程会将要求移交给php-fpm的worker进程进行处理,也便是最开头所说的nginx调用了php,实在严格得讲是nginx间接调用php。
理解了上面的这五个大略事理,在nginx中配置php调用方法就变得轻而易举。
二、配置文件:直接贴上代码逐行进行讲解,此处贴出一个能正常启动php脚本的最简nginx vhost配置:
server { listen 8011; server_name test.cn; location ~ \.php?.$ { root /share/test; fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }}
1、第一个大括号 server{ }:不必多说,代表一个独立的server,
2、listen 8011:代表该server监听8011端口
3、location ~ \.php?.${ }:代表一个能匹配对应uri的location,用于匹配一类uri,并对所匹配的uri要求做自定义的逻辑、配置。这里的location,匹配了所有带.php的uri要求,例如:http://192.168.244.128:8011/test.php/asdasd http://192.168.244.128:8011/index.php等
4、root /share/test:要求资源根目录,见告匹配到该location下的uri到/share/teset文件夹下去探求同名资源。
5、fastcgi_pass 127.0.0.1:9000:这行开始是本文的重点:这行代码的意思是,将进入到该location内的uri要求看做是cgi程序,并将要求发送到9000端口,交由php-fpm处理。
6、fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; :这行配置意思是:动态添加了一行fastcgi配置,配置内容为SCRIPT_FILENAME,奉告管理进程,cgi脚本名称。由于我的nginx中只有fastcgi_params文件,没有fastcgi.conf文件,以是要使php-fpm知道SCRIPT_FILENAME的详细值,就必须要动态的添加这行配置。
7、include fastcgi_params; 引入fastcgi配置文件
以上便是最简洁版的nginx启动php脚本的最简配置,当重启nginx之后,在/share/test目录下创建一个xx.php文件,输入<?php echo \"大众hello world\公众; ?>保存,然后在浏览器中访问localhost:8011/xx.php 就可以在网页上显示hello world了。
三、总结:实在对付调用php这类cgi脚本程序,只要理解了我开头提到的5点事理,然后结合5-7行配置讲解,完备可以较清晰的明白为什么须要这样配置了。对付新手而言,每每被fastcgi,php-fpm cgi程序搞得一头雾水,胡乱配置已通,跑通上线,也不去穷究其事理。以是希望写在这里的东西能对读者带来一点点的帮助。