PHP-FPM与Nginx的通信机制的介绍(附示例)

PHP-FPM与Nginx的通信机制的介绍(附示例)

内容导读

收集整理的这篇技术教程文章主要介绍了PHP-FPM与Nginx的通信机制的介绍(附示例),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3034字,纯文字阅读大概需要5分钟

内容图文

本篇文章给大家带来的内容是关于PHP-FPM与Nginx的通信机制的介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

PHP-FPM 介绍

  • CGI 协议与 FastCGI 协议

每种动态语言( PHP,Python 等)的代码文件需要通过对应的解析器才能被服务器识别,而 CGI 协议就是用来使解释器与服务器可以互相通信。PHP 文件在服务器上的解析需要用到 PHP 解释器,再加上对应的 CGI 协议,从而使服务器可以解析到 PHP 文件。

由于 CGI 的机制是每处理一个请求需要 fork 一个 CGI 进程,请求结束再kill掉这个进程,在实际应用上比较浪费资源,于是就出现了CGI 的改良版本 FastCGI,FastCGI 在请求处理完后,不会 kill 掉进程,而是继续处理多个请求,这样就大大提高了效率。

  • PHP-FPM 是什么

PHP-FPM 即 PHP-FastCGI Process Manager, 它是 FastCGI 的实现,并提供了进程管理的功能。进程包含 master 进程和 worker 进程两种;master 进程只有一个,负责监听端口,接收来自服务器的请求,而 worker 进程则一般有多个(具体数量根据实际需要进行配置),每个进程内部都会嵌入一个 PHP 解释器,是代码真正执行的地方。

Nginx 与 php-fpm 通信机制

当我们访问一个网站(如 www.test.com)的时候,处理流程是这样的:

www.test.com



|



|


Nginx



|



|路由到www.test.com/index.php



|



|加载nginx的fast-cgi模块



|



|fast-cgi监听127.0.0.1:9000地址



|



|www.test.com/index.php请求到达127.0.0.1:9000



|



|

 等待处理...
  • Nginx 与 php-fpm 结合

在 Linux 上,Nginx 与 php-fpm 的通信有 tcp 和 unix socket 两种方式。

tcp 的优点是可以跨服务器,当 Nginx 和 PHP-fpm 不在同一台机器上时,只能使用这种方式。

Unix socket 又叫 IPC(inter-process communication 进程间通信) socket,用于实现同一主机上的进程间通信,这种方式需要在 nginx配置文件中填写 php-fpm 的 socket 文件位置。

两种方式的数据传输过程如下图所示:

二者的不同:

由于 Unix socket 不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进程。所以其效率比 tcp 的方式要高,可减少不必要的 tcp 开销。不过,Unix socket 高并发时不稳定,连接数爆发时,会产生大量的长时缓存,在没有面向连接协议的支撑下,大数据包可能会直接出错不返回异常。而 tcp 这样的面向连接的协议,可以更好的保证通信的正确性和完整性。

Nginx 与 php-fpm 结合只需要在各自的配置文件中做设置即可:

1) Nginx 中的配置

以 tcp 通信为例

server {

listen


 80; #监听80端口,接收http请求

server_name
www.test.com; #就是网站地址

root /usr/local/etc/nginx/www/huxintong_admin; # 准备存放代码工程的路径

#路由到网站根目录www.test.com时候的处理

location / {



index index.php; #跳转到www.test.com/index.php



autoindex on;

}


 #当请求网站下php文件的时候,反向代理到php-fpm

location ~ .php$ {



include /usr/local/etc/nginx/fastcgi.conf; #加载nginx的fastcgi模块



fastcgi_intercept_errors on;



fastcgi_pass
 127.0.0.1:9000; # tcp 方式,PHP-fpm 监听的IP地址和端口


 # fasrcgi_pass /usr/run/php-fpm.sock # unix socket 连接方式

}}

2) php-fpm 的配置

listen = 127.0.0.1:9000# 或者下面这样listen = /var/run/php-fpm.sock
注意,在使用 Unix socket 方式连接时,由于 socket 文件本质上是一个文件,存在权限控制的问题,所以需要注意 Nginx 进程的权限与 php-fpm 的权限问题,不然会提示无权限访问。(在各自的配置文件里设置用户)

通过以上配置即可完成 php-fpm 与 Nginx 的通信。

以上就是PHP-FPM与Nginx的通信机制的介绍(附示例)的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的PHP-FPM与Nginx的通信机制的介绍(附示例)全部内容,希望文章能够帮你解决PHP-FPM与Nginx的通信机制的介绍(附示例)所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。


本文关键词:

联系我们

在线咨询:点击这里给我发消息

邮件:w420220301@qq.com