Nginx 和外网服务器的 PHP-FPM 通信

摘要:nginx 和外网服务器的 php-fpm 通信,nginx 和 php 通信有两种方式,一种是 unix socket 方式,一种是 tcp socket 方式,两种的区别就是 unix socket 能本机通信,而 tcp socket 可以跨服务器通信。

Nginx 和 PHP 的两种通信方式

一般情况 nginx 和 php 通信有两种方式,一种是 unix socket 方式,一种是 tcp socket 方式。这两种的区别就是, unix socket 只能在本机通信,而 tcp socket 可以跨服务器通信。两种访问方式可有优缺点。

unix socket 通信方式配置如下,两个文件路径要一致,因为是监听 php-cgi.socket 文件,所以要注意下这个文件的权限问题。

# nginx fastcgi 配置如下
fastcgi_pass  unix:/tmp/php-cgi.sock;

# php-fpm.conf 文件配置如下
listen = /tmp/php-cgi.sock
tcp socket 通信方式如下,以下配置是在内网情况下,这是本机使用 tcp socket 的配置。
# nginx fastcgi 配置如下
fastcgi_pass 127.0.0.1:9000;

# php-fpm.conf 文件配置如下
listen = 127.0.0.1:9000


Nginx 配置访问外面 PHP-FPM 服务

利用 tcp socket 配置 nginx 访问外网的 php 服务。

# nginx fastcgi 配置如下
fastcgi_pass x.x.x.x:9000; # 此处 x.x.x.x 是外网 ip

# php-fpm.conf 文件配置如下
listen = 0.0.0.0:9000
;listen.allowed_clients = 127.0.0.1 # 允许访问 fastcgi 进程的 ip,设置 any 为不限制 ip,如果要设置其他主机的 nginx 也能访问这台 fpm 进程,listen 处要设置成本地可被访问的 ip。默认值是 any。每个地址是用逗号分隔. 如果没有设置或者为空,则允许任何服务器请求连接。

需要注意的是,本地服务器的文件和请求 php 服务器的上的文件都要存在,比如本地服务器 /srv/www/home/test.php 的文件,php 的那台服务器上的 /srv/www/home/test.php 文件也要存在。

因为 nginx 会把 php 文件转发给 php-fpm 的监听的地址和端口,顺便会把请求的路径同时带过去,只是带过去路径而不是文件本身。php 收到 nginx 转发过来得请求后,会去服务器上根据这个路径去找对应的文件进行处理,所以要保证在两台服务上的相同目录下都存在该项目文件。

结束语:感谢您对本网站文章的浏览,欢迎您的分享和转载,但转载请说明文章出处。
Top