在Nginx服务器的状况下,当咱们输入 http://localhost:8080/index.php回车的时候php
浏览器会将请求发送给Nginx,Nginx会根据咱们所配置的以.php结尾的PHP的文件交给fastcginginx
location ~ \.php { root /nginx; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include /usr/local/etc/nginx/fastcgi.conf; }
经过fastcgi_pass命令将请求转发给fastcgi 即php-fpm;vim
php-fpm是fastcgi的一种实现。浏览器
通常咱们会将收到的请求转发到本地,即php-fpm所监听的本地端口 127.0.0.1:9000服务器
若是咱们想实现分布式,将咱们的请求转发给远程的php-fpm来处理该怎么去实现呢?网络
1.修改本地Nginx fastcgi_pass 监听的IP:端口分布式
fastcgi_pass 127.0.0.1:9000 修改成 x.x.x.x:9000php-fpm
其中x.x.x.x表明远程主机的IP地址学习
2.修改远程php-fpm的所监听的IP:端口spa
将远程的php-fpm所监听的IP:端口,由127.0.0.1:9000改成:0.0.0.0:9000
127.0.0.1 表明本机
0.0.0.0 表明全部本地地址,至关于一个集合:全部不清楚的主机和目的网络。这里的“不清楚”是指在本机的路由表里没有特定条目指明如何到达。
若是咱们不修改远程php-fpm监听的IP:端口为0.0.0.0:9000
在本地直接访问 http://localhost:8081/index.php Nginx会报错出现 (其中x.x.x.x表明我远程主机地址)
通常咱们php-fpm没有启动的时候会抛出这个错误,可是咱们的远程php-fpm明明已经开启了,因此没法链接到远程php-fpm所监听的地址。
*84 kevent() reported that connect() failed (61: Connection refused)
while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET /index.php HTTP/1.1",
upstream: "fastcgi://x.x.x.x:9000", host: "localhost:8081"
接下来咱们将php-fpm监听的IP:端口改成:0.0.0.0:9000;重启php-fpm,而后咱们继续访问 http://localhost:8081/index.php
这时候浏览器出现了
找不到文件?为何呢?我接着分析Nginx的配置(其中x.x.x.x表明个人远程主机地址)
location ~ \.php { root /nginx; fastcgi_pass x.x.x.x:9000; fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include /usr/local/etc/nginx/fastcgi.conf; }
请特别注意”fastcgi_script_name”一行(黑体部分),PHP-CGI特别须要此行信息来肯定PHP文件的位置。也就是说,当咱们将请求转发给咱们fastcgi(即php-fpm)的时候,会把所请求的文件确切路径也发给fastcgi(即php-fpm);
假如我Nginx本地服务器根目录为/nginx,那么我所请求的index.php的绝对路径是/nginx/index.php,Nginx在将请求转发给远程php-fpm的时候,也会把这个路径发给远程php-fpm,远程php-fpm会根据这个路径/nginx/index.php找到index.php而且执行,将结果返回给本地Nginx服务器;这也就意味着咱们远程php-fpm所在的主机必须存在路径为/nginx/index.php的文件才行,不然会报404的错误,文件不存在(即咱们所看到的File not found.);
接下来在根目录下创建nginx 而且在nginx内新建index.php
cd / mkdir /nginx 创建nginx cd nginx touch index.php 建立文件
vim index.php 编辑输入PHP代码
咱们在vim index.php编辑的时候输入以下代码:
<?php echo 'remote php-fpm'; ?>
再次访问http://localhost:8081/index.php
会出现以下的结果:
成功访问。
小结:
1:远程php-fpm监听IP:端口 改成0.0.0.0:9000(端口能够适当修改,默认9000)
2:要注意请求的文件路径地址要和本地服务器的根目录一直,不然会报404
更过的进阶技术能够关注公众号:进阶的脚步 回复:学习资料 有惊喜哦