在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. Tp-link路由器怎么设置端口映射 内网端口映射听语音

    https://jingyan.baidu.com/article/ca00d56c710ef9e99eebcf85.html 只有一台能上网的电脑就可以自己免费搭建服务器,本经验简单介绍家用tp-l ...

  2. Tomcat 源码分析(二)——Request处理全过程

    前一篇博客,我总结了Tomcat对于生命周期组件的管理.在了解了容器的启动之后,我们开始剖析它的内部运行机制.今天我们来分析一下Tomcat如何处理Request.Socket作为网络通信的基础也是R ...

  3. 常用SQL笔记总结

    DDL(data definition language)创建和管理表 1.创建表 1.直接创建 例如: create table emp( name varchar(20), salary int ...

  4. 注入理解之APC注入

    近期学习做了一个各种注入的MFC程序,把一些心得和体会每天分享一些 APC(Asynchronous procedure call)异步程序调用,在NT中,有两种类型的APCs:用户模式和内核模式.用 ...

  5. java二维码生成技术

    自从微信扫描出世,二维码扫描逐渐已经成为一种主流的信息传递和交换方式.下面就介绍一下我学习到的这种二维码生成方式.预计再过不久身份证户口本等都会使用二维码识别了,今天就做一个实验案例: 二维码主要实现 ...

  6. mybatis-XML配置文件

    <?xml version="1.0" encoding="UTF-8" ?><!--plugins在配置文件中的位置必须要符合要求,否则会报 ...

  7. jQuery给input绑定回车事件

    dataInput为Span元素ID <script type="text/javascript" src="Scripts/jquery-1.6.2.js&quo ...

  8. JAVA中限制接口流量、并发的方法

    JAVA中限制接口流量可以通过Guava的RateLimiter类或者JDK自带的Semaphore类来实现,两者有点类似,但是也有区别,要根据实际情况使用.简单来说, RateLimiter类是控制 ...

  9. A/X家FPGA架构及资源评估

    评估对比xilinx以及altera两家FPGA芯片逻辑资源. 首先要说明, 现今FPGA除了常规逻辑资源,还具有很多其他片内资源比如块RAM.DSP单元.高速串行收发器.PLL.ADC等等,用以应对 ...

  10. 【转】shell学习笔记(六)——流程控制之for循环

    基本语法格式: for 变量 in 列表 do 命令行(通常用到循环变量) done ********Linux Shell for循环写法总结******** for((i=1;i<</ ...