前言
nginx转发php类型的请求可以通过fastcgi的方式,fastcgi支持TCP和unixdomainsocket两种方式。
Unixdomainsocket监听
Unixdomainsocket或者IPCsocket是一种终端,可以使同一台操作系统上的两个或多个进程进行数据通信。
与管道相比,Unixdomainsockets既可以使用字节流和数据队列,而管道通信则只能通过字节流。
Unixdomainsockets的接口和Internetsocket很像,但它不使用网络底层协议来通信。Unixdomainsocket的功能是POSIX操作系统里的一种组件。
TCP监听
通过网络TCP链接建立网络通信,即使是监听.0.0.1,也是通过网络底层协议来通信。相对于socket方式,会消耗一些网络资源。
选择TCP还是Unixdomainsocket?
如果nginx和php-fpm都在同一台机器,当然是选择Unixdomainsocket方式;但是如果nginx和php-fpm不在同一台机器,socket方式就不能用了。
如果网站的静态资源和php处理的页面是分开的,需要较高的处理能力,可以选择将nginx和php-fpm分开,通过TCP监听的方式组成集群进行处理。(因为fastcgi么有转发静态资源,所以需要nginx将静态资源转发对应的静态资源的目录)
php配置
php-fpm修改php-fpm.conf
TCP模式:
listen=0.0.0.0:
Unixdomainsocket模式:
listen=/opt/php/var/run/php-fpm.sock;这里的目录也可以选择/dev/shm/php-fpm.sock,/dev/shm/是一个内存的目录,相对读写的速度会快一点。
nginx修改
TCP模式:
upstreamfpm_server{server...:; server...:;}server{ listen80; server_namelocalhost; root/var/