LNMP WEB架构构建
LNMP WEB架构处理请求过程
1.Nginx为一款高性能Web服务器,本身是不能处理PHP的,当接收到客户端浏览器发送HTTP Request请求时,Nginx服务器响应并处理web请求,静态资源CSS、图片、视频、TXT等静态文件请求,Nginx服务器可以直接处理并回应。
2.Nginx并不能直接处理PHP页面,PHP动态页面请求Nginx不能直接处理,Nginx服务器会将PHP网页脚本通过接口传输协议(网关协议)PHP-FCGI(Fast-CGI)传输给PHP-FPM(PHP进程管理程序)
3.PHP-FPM不做处理,然后PHP-FPM调用PHP解析器进程,PHP解析器进程解析PHP脚本信息,处理PHP页面。PHP解析器进程可以启动多个,可以实现多进行并发执行。
4.PHP解释器将解析后的脚本返回到PHP-FPM,PHP-FPM再通过Fast-CGI的形式将脚本信息传送给Nginx,Nginx服务器再 通过Http Response的形式传送给浏览器,浏览器再进行解析与渲染然后进行呈现。
CGI、FAST-CGI、PHP-CGI、PHP-FPM概念总结:
- CGI:Common gateway interface 通用网关接口;
- FastCGI:Fast common gateway interface 快速通用网关接口;
- PHP-FPM:PHP-Fast CGI Process Manager CGI,是FastCGII协议的实现并且带进程管理器;
PHP-FPM是PHPCGI进程管理器,可以有效控制内存和进程、可以平滑重载PHP配置。 PHP-CGI(PHP解析器进程)是解析PHP代码的程序,属于PHP程序解释器,只负责解析请求,不负责进程管理。
整合PHP和Nginx,配置文件并测试phpinfo();
1.修改/usr/local/nginx/conf/nginx.conf为以下内容[root@www /]# cat /usr/local/nginx/conf/nginx.conf|grep -E -v “#|^$“worker_processes 1;
events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } location ~ \.php$ { root /var/www/html; #指定网站根目录 fastcgi_pass 127.0.0.1:9000; #指定fastcgi转发端口.Nginx通过此端口与php进行交互 fastcgi_index index.php; #指定默认索引页(首页) fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
#脚本文件请求的路径,这个配置的意思是在浏览器中访问的.php文件,实际读取的是 $document_root(网站根目录:/var/www/html)下的.php文件
#也就是说当访问127.0.0.1/index.php的时候,需要读取网站根目录下面的index.php文件,如果没有配置这一配置项时,nginx不会去网站根目录下访问.php文件,所以返回空白
include fastcgi_params; #调用fastcgi 的变量文件。可以nginx中配置文件里面看到(/usr/local/nginx/conf/),支持上一条参数 } } }
2.保存后重新载入nginx.conf
[root@localhost /]# /usr/local/nginx/sbin/./nginx -s reload
3.在/var/www/html目录下写入index.php
[root@localhost /]# echo "<?php phpindo(); ?>" > /var/www/html/index.php
4.通过浏览器访问ip/index.php