服务器安装php可以独立运行,为什么还需要安装nginx呢?

php是一门编程语言,是可以编写很多程序,但是只有php的话,你的php程序只能在你的服务器里孤立的运行,而nginx可以实现php和客户端之间的交互。


一、概念解析

1.CGI

CGI是Web服务器运行时外部程序的规范接口,按CGI编写的程序可以扩展服务器功能。CGI应用程序能与浏览器进行交互,还可通过数据库API与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据。格式化为HTML文档后,发送给浏览器,也可以将从浏览器获得的数据放到数据库中。几乎所有服务器都支持CGI,可用任何语言编写CGI

2.FastCGI

FastCGI是一个可伸缩地、高速地在HTTP server和动态脚本语言间通信的接口。多数流行的HTTP
server都支持FastCGI,包括Apache、Nginx和lighttpd等。同时FastCGI也被许多脚本语言支持,其中就有PHP。FastCGI是从CGI发展改进而来的。
FastCGI接口方式采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。
这种方式的优点:可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。

3.PHP-FPM

PHP-FPM(PHP FastCGI Process Manager)意:PHP FastCGI 进程管理器,用于管理PHP进程池的软件,用于接受web服务器的请求。
PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置。
https://www.cnblogs.com/followyou/p/9460058.html

二、交互过程

1.第一步:

用户将http请求发送给nginx服务器(用户和nginx服务器进行三次握手进行TCP连接)

2.第二步:

nginx根据请求的url和后缀请求进行解析

3.第三步:

如果用户访问的是静态资源,nginx直接将用户请求的静态资源返回给用户;动态内容,nginx会将请求交给FastCGI客户端,通过fastcgi_pass将用户的请求发送给php-fpm

4.第四步:

wrapper收到php-fpm转过来的请求后,wrapper会生成一个新的线程调用php动态程序解析服务器

5.第五步:

php会将查询到的结果返回给nginx

6.第六步:

nginx构造一个响应报文将结果返回给用户

这只是nginx的其中一种,用户请求的和返回用户请求结果是异步进行,即为用户请求的资源在nginx中做了一次中转,nginx可以同步,即为解析出来的资源,服务器直接将资源返回给用户,不用在nginx中做一次中转

三、通信方式

Nginx和PHP-FPM的进程间通信有两种方式

一种是TCP
一种是UNIX Domain Socket

unix socket

需要在nginx配置文件中填写php-fpm运行的pid文件地址

location ~ \.php$ {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
}

tcp socket

需要在nginx配置文件中填写php-fpm运行的ip地址和端口号

location ~ \.php$ {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
}

如果是在同一台服务器上运行的nginx和php-fpm,并发量不超过1000,选择unix socket,因为是本地,可以避免一些检查操作(路由等),因此更快,更轻。 如果面临高并发业务,我会选择使用更可靠的tcp socket,以负载均衡、内核优化等运维手段维持效率。


本文由 一切随风 创作,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论