Nginx不只有处理http请求的功能,还能做反向代理。
Nginx通过反向代理功能将动态请求转向后端Php-fpm。
在 Linux 上,nginx 与 php-fpm 的通信有 tcp socket 和 unix socket 两种方式。
- tcp socket 的优点是可以跨服务器,当 nginx 和 php-fpm 不在同一台机器上时,只能使用这种方式。
- Unix socket 又叫 IPC(inter-process communication 进程间通信) socket,用于实现同一主机上的进程间通信,这种方式需要在 nginx配置文件中填写 php-fpm 的 socket 文件位置。
两种方式的数据传输过程如下图所示:
二者的不同:
由于 Unix socket 不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进程。所以其效率比 tcp socket 的方式要高,可减少不必要的 tcp 开销。不过,unix socket 高并发时不稳定,连接数爆发时,会产生大量的长时缓存,在没有面向连接协议的支撑下,大数据包可能会直接出错不返回异常。而 tcp 这样的面向连接的协议,可以更好的保证通信的正确性和完整性。
下面我们来配置一个全新的Nginx+Php-fpm
配置nginx.conf文件
进入nginx目录下,编辑nginx.conf文件。
如图,在nginx.conf最后一行,添加include文件添加对应的server
进入上面的include的路径,添加一个server
unix socket 方式 修改fastcgi_pass如下fastcgi_pass unix:/usr/run/php-fpm.sock
下面我们解释下配置项的含义
1 | server { |
下面我们启用php的php-fpm来处理这个请求
打开php-fpm.conf文件,我们看到如下配置:
unix socket 方式 修改php-fpm.conf如下listen = /usr/run/php-fpm.sock
即:php-fpm模块监听127.0.0.1:9000端口 或者 php-fpm.sock文件,等待请求到来去处理。
注意:在使用 unix socket 方式连接时,由于 socket 文件本质上是一个文件,存在权限控制的问题,所以需要注意 nginx 进程的权限与 php-fpm 的权限问题,不然会提示无权限访问。(在各自的配置文件里设置用户)