nginx本身不支持php
想让nginx跑起PHP,光靠它自己可不行。它需要一个得力的“翻译官”,也就是PHP解析服务。常见的选择有php-fpm或者spawn-fcgi。考虑到在Ubuntu系统上配置的便捷性,我们这次选择用php-fpm来实现。
安装php和php-fpm
安装方法这里就不赘述了,因为过程相当直接——直接用系统自带的包管理器安装就行。安装完成后,别忘了启动相应的服务。
修改nginx配置文件
接下来是关键一步:修改nginx的配置文件。找到 /etc/nginx/sites-a vailable/default 这个文件。首先,得让默认的索引页面能识别PHP文件,找到index那行,改成:
index index.php index.html index.htm;
然后,开启对PHP的支持。找到配置文件里被注释掉的 “location ~ .php” 部分,把它释放出来并稍作修改:
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# 注意:你应在php.ini中设置“cgi.fix_pathinfo = 0;”
# 如果单独使用php5-cgi:
# fastcgi_pass 127.0.0.1:9000;
# 如果使用php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
这里有个细节:“fastcgi_pass 127.0.0.1:9000;” 这行是和spawn-fcgi配合使用的,既然我们用了php-fpm,就得把它注释掉,转而使用下面那行指向socket的配置。配置文件修改完毕后,重启nginx服务让改动生效。
原理
这背后的工作流程是怎样的呢?简单来说,nginx本职是个高效的web服务器,但它并不直接处理PHP代码。当它接收到一个请求时,会先进行判断:如果这是个PHP请求,nginx就会很“自觉”地把它转发给PHP解释器(也就是我们配置的php-fpm)去处理。等php-fpm处理完毕,把结果交还给nginx,nginx再最终送达给客户端。你可以把这个过程想象成nginx是前台接待,而php-fpm是后场的专业技师,两者通过fastcgi这个“内部通信协议”紧密协作,共同完成动态页面的生成。
参考
https://www.nginx.cn/231.html
