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. react native windows 搭建(完整版)

    声明:用windows 搭建的react native只能开发安卓应用 1.准备安装java jdk,以及Android SDK 传送门: java   JDK   Android SDK(自行寻找) ...

  2. 【反演复习计划】【bzoj3529】数表

    Orz PoPoQQQ大爷 按照他ppt的解法,这题可以划归到之前的题了OrzOrz 跪wy写的题解(Stealth Assassin)https://www.luogu.org/wiki/show? ...

  3. react-slick无法显示预期效果问题

    目前学习react来做新项目,我要做一个图片的轮播,是那种一次可以展示几张图片的循环轮播,在我们使用的antd里面没有,然后前辈叫我使用react-slick插件,于是我就使用npm命令安装了reac ...

  4. python tips:列表推导

    看一个代码: a=[1,2,3,4,5,6,7,8,9] b=[5 if (i >3) else 1 for i in a] print(b) 这就是列表推导. 列表推导一般用在通过一个list ...

  5. AC日记——Magazine Ad codeforces 803d

    803D - Magazine Ad 思路: 二分答案+贪心: 代码: #include <cstdio> #include <cstring> #include <io ...

  6. 爬虫框架Scrapy的第一个爬虫示例入门教程

    我们使用dmoz.org这个网站来作为小抓抓一展身手的对象. 首先先要回答一个问题. 问:把网站装进爬虫里,总共分几步? 答案很简单,四步: 新建项目 (Project):新建一个新的爬虫项目 明确目 ...

  7. mysql table status

    SHOW TABLE STATUS 能获得表的信息 可以SHOW TABLE STATUS where name='表名'

  8. fmod()函数和modf()函数

    最近从博客上看到了一个fmod函数,结果又蹦出来一个modf函数 fmod()函数: 头文件:#include<math.h> C库函数... fmod()用来对浮点数进行取模(求余),原 ...

  9. 记一次对python反弹shell的分析

    前言 昨天学习了反弹shell,对python弹shell产生了一些疑惑 python -c 'import socket,subprocess,os;s=socket.socket(socket.A ...

  10. 【博弈论】bzoj2463 [中山市选2009]谁能赢呢?

    ∵都是最优操作 ∴n*n=偶数时Bob赢,否则Alice赢 n*n的奇偶性等价于n的奇偶性. #include<cstdio> using namespace std; int n; in ...