Nginx调用远程php-fpm

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

原文: https://www.cnblogs.com/feiyafeiblog/p/6938515.html

--------------------------------------------------------------------------------------------------------

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

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

  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;

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

*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

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

  1. Nginx调用远程php-fpm

    在Nginx服务器的情况下,当我们输入 http://localhost:8080/index.php回车的时候 浏览器会将请求发送给Nginx,Nginx会根据我们所配置的以.php结尾的PHP的文 ...

  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. windows使用celery遇到的错误

    https://www.jianshu.com/p/e5539d96641c 按照这个教程一步步执行到最后报错了. 运行task_dispatcher.py的时候 ValueError: not en ...

  2. 【bzoj2561】最小生成树

    嗯……这题是一个网络流. 加入的边为u,v长度L 则所有长度大于L的边不能使得u,v连通 求个最小割即可.小于同理 两次最小割结果相加. #include<bits/stdc++.h> # ...

  3. Newtonsoft.Json 序列化和反序列化 以及时间格式 2

    一.JSON使用JsonPropertyAttribute重命名属性名 1.先创建一个Movie对象,然后在其属性上添加JsonProperty,并指定重命名的名称.注意:属性Name和Directo ...

  4. BZOJ 3038 上帝造题的七分钟二

    无题目 但是百度会发现题目和3211基本一致 所以看上一篇博文的上一篇博文呢

  5. redis.clients.jedis.HostAndPort - cant resolve localhost address

    阿里云ECS部署spring-boot访问redis出现redis.clients.jedis.HostAndPort - cant resolve localhost address 摘要: 阿里云 ...

  6. ccf-I’m stuck!

      给定一个R行C列的地图,地图的每一个方格可能是'#', '+', '-', '|', '.', 'S', 'T'七个字符中的一个,分别表示如下意思: '#': 任何时候玩家都不能移动到此方格: ' ...

  7. 学习apache commons lang3的源代码 (2):RandomStringUtils

    本文,主要是分析类;RandomStringUtils. 下面这个方法的:count:表示要生成的数量(比如4个字符组成的字符串等) start,end,表示限定的范围,比如生成ascii码的随机等. ...

  8. shell字符串变量的特异功能:字符串的替换(${str/源模式/目标模式},${str//源模式/目标模式})、截断

    https://blog.csdn.net/wzb56_earl/article/details/6953612

  9. AC日记——曼哈顿交易 洛谷 P3730

    曼哈顿交易 思路: 都是套路: 代码: #include <cmath> #include <cstdio> #include <cstring> #include ...

  10. ZOJ 3380 Patchouli's Spell Cards

    方案数,$dp$. 总的方案数有$n^m$种,符合要求的直接算不好算,可以算反面,即不符合要求的. 设$dp[i][j]$表示前$i$种等级填了$j$个位置,那么$dp[i][j]=sum(dp[i- ...