在Nginx服务器的情况下,当我们输入 http://localhost:8080/index.php回车的时候

浏览器会将请求发送给Nginx,Nginx会根据我们所配置的以.php结尾的PHP的文件交给fastcgi

  location ~ \.php {
root /nginx;
fastcgi_pass 127.0.0.1:;
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;

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:9000

    其中x.x.x.x代表远程主机的IP地址

   2.修改远程php-fpm的所监听的IP:端口

   将远程的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所监听的地址。

* kevent() reported that connect() failed (: 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:;
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

更过的进阶技术可以关注公众号:进阶的脚步  回复学习资料  有惊喜哦

Nginx调用远程php-fpm的更多相关文章

  1. [转]Nginx调用远程php-fpm

    Nginx调用远程php-fpm 前后端分离的网站,要在异地部署多套网页的时候,这种nginx配置调用远程php-fpm的方式,不错.可以提高网页的相应速度. 原文: https://www.cnbl ...

  2. nginx调用php-fpm出错解决方法和nginx配置详解

    装完了nginx和php-5.5,配置好了nginx调用php后,就开始启动php-fpm. 使用下面的命令 复制代码 代码如下: /usr/local/php/sbin/php-fpm 就可以启动了 ...

  3. Asp反向代理程序,调用远程站点全站数据,一款脚本级反向代理程序.

    前些天临时写的一脚本级反向代理程序,用法很简单,设置好目标站地址,然后放到你网站根目录:index.asp,再将404页面自定义为:index.asp,即可. 由于暂时没有 url 替换需要,所以没有 ...

  4. discuz云平台报调用远程接口失败的问题分析和解决

    根据网络两篇文章整理 问题描述:当开通或关闭某个云平台服务的时候,报如下错误信息:调用远程接口失败.请检查您的服务器是否处于内网以及您服务器的防火墙设置. 云平台测试站点的接口文件正常,于是开始在文件 ...

  5. ASP.NET MVC3开发 - CodeFisrt数据库篇之M层验证之调用远程方法(Remote)验证

    本文讲述在作者在使用.net mvc3进行开发的时候用到的两种调用远程验证的方法,第一种方法比较傻瓜,第二种方法方便好用,调用远程验证是个比较常见的验证方法,比如注册用户时的用户名唯一性验证. 作者原 ...

  6. PDA(Windows Mobile)调用远程WebService

    之前用模拟器测试过调用远程的WebService,发现总是提示"无法连接到远程服务器"的错误,不管是Windows Mobile6.0 还是6.5都是一样,按照网上的办法,改注册表 ...

  7. .Net Remoting 调用远程对象

    根据需求,我们的系统必须以C/S方式构建,而且是三层架构,这样一来,就出现了服务器端和客户端通信的问题. 为了解决双方的通信问题,还要考虑效率.性能等方面,经过分析.试验,我们根据效率.移植.开发难易 ...

  8. 【原】Java程序调用远程Shell脚本

    此程序的目的是执行远程机器上的Shell脚本. [环境参数]远程机器IP:192.168.234.123用户名:root密码:rootShell脚本的路径:/home/IFileGenTool/Bak ...

  9. Remoting 学习一调用远程的类就像调用本地的类一样

    Remoting   使用TCP/IP 协议,服务端可以是服务,web服务器,类.   例子1.  远程调用服务端的类,就像调用客户端机器上的类一样.   服务端代码 (先定义被客户端调用的类,然后注 ...

随机推荐

  1. 织梦dede在首页调用留言本

    织梦dedecms在首页调用留言本 . {dede:loop table=dede_guestbook sort=dtime row=10 titlelen=36 typeid=40 if=ische ...

  2. jquery checkbox 全选反选代码只能执行一遍,第二次就失败

    遇到问题背景: 在写到购物车的全选交互的时候,商品选中的状态只有在第一次的时候可以,第二次就无法选中:(代码如下) $(".chooseall").click(function() ...

  3. linux nvme的那些workqueue

    目前nvme三个常见的使用的workqueue ,主要有nvme_workq,nvme_rdma_wq ,nvme_fc_wq,下面一一描述一下初始化及使用的场景.分别对应于NVME over PCI ...

  4. LINUX文档管理命令

    body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...

  5. CentOs下安装PHP扩展curl

    服务器运行一段时间后,可能突然会需求添加某个扩展,如curl.pdo.xmlrpc等,这就需要在不重新编译Linux PHP的情况下独立添加扩展. 1.安装crul wget http://curl. ...

  6. python_14_生成器

    什么是生成器? -- 动态的生成有规律的列表和元组,查询多少才会生成多少数据,不需要时数据不存在 - 大到10几万数据,就省空间了 什么是列表生成式? -- [ handle_i_result for ...

  7. 20165220 学习基础和C语言基础调查

    # # # # 我觉得我打游戏(不知道算不算一技之长)毕竟从小学一年级就接触到了各种形形色色的游戏,讲道理其实我的游戏天赋毕竟还是很大的,从意识到感觉我觉得都比大多数人好一些,其实吧打游戏打得好也是很 ...

  8. Python简单爬虫Requests

    首先添加库 附配环境变量:安装环境变量 cmd==> 输入指令: path=%path%;C:\Python(Python安装路径) 回车 python2.7版本可能没有pip的话可以先到www ...

  9. curl访问nagios中Host Status Details For All Host Groups页面的方法

    由于进入nagios要输入用户名与密码才能进入,故用curl模拟输入用户名与密码取得当前所有主机的报警信息: # curl -u nagiosadmin:password http://192.168 ...

  10. TCP那些事儿(下)

    这篇文章是下篇,所以如果你对TCP不熟悉的话,还请你先看看上篇<TCP的那些事儿(上)> 上篇中,我们介绍了TCP的协议头.状态机.数据重传中的东西.但是TCP要解决一个很大的事,那就是要 ...