Nginx调用远程php-fpm
在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的更多相关文章
- [转]Nginx调用远程php-fpm
Nginx调用远程php-fpm 前后端分离的网站,要在异地部署多套网页的时候,这种nginx配置调用远程php-fpm的方式,不错.可以提高网页的相应速度. 原文: https://www.cnbl ...
- nginx调用php-fpm出错解决方法和nginx配置详解
装完了nginx和php-5.5,配置好了nginx调用php后,就开始启动php-fpm. 使用下面的命令 复制代码 代码如下: /usr/local/php/sbin/php-fpm 就可以启动了 ...
- Asp反向代理程序,调用远程站点全站数据,一款脚本级反向代理程序.
前些天临时写的一脚本级反向代理程序,用法很简单,设置好目标站地址,然后放到你网站根目录:index.asp,再将404页面自定义为:index.asp,即可. 由于暂时没有 url 替换需要,所以没有 ...
- discuz云平台报调用远程接口失败的问题分析和解决
根据网络两篇文章整理 问题描述:当开通或关闭某个云平台服务的时候,报如下错误信息:调用远程接口失败.请检查您的服务器是否处于内网以及您服务器的防火墙设置. 云平台测试站点的接口文件正常,于是开始在文件 ...
- ASP.NET MVC3开发 - CodeFisrt数据库篇之M层验证之调用远程方法(Remote)验证
本文讲述在作者在使用.net mvc3进行开发的时候用到的两种调用远程验证的方法,第一种方法比较傻瓜,第二种方法方便好用,调用远程验证是个比较常见的验证方法,比如注册用户时的用户名唯一性验证. 作者原 ...
- PDA(Windows Mobile)调用远程WebService
之前用模拟器测试过调用远程的WebService,发现总是提示"无法连接到远程服务器"的错误,不管是Windows Mobile6.0 还是6.5都是一样,按照网上的办法,改注册表 ...
- .Net Remoting 调用远程对象
根据需求,我们的系统必须以C/S方式构建,而且是三层架构,这样一来,就出现了服务器端和客户端通信的问题. 为了解决双方的通信问题,还要考虑效率.性能等方面,经过分析.试验,我们根据效率.移植.开发难易 ...
- 【原】Java程序调用远程Shell脚本
此程序的目的是执行远程机器上的Shell脚本. [环境参数]远程机器IP:192.168.234.123用户名:root密码:rootShell脚本的路径:/home/IFileGenTool/Bak ...
- Remoting 学习一调用远程的类就像调用本地的类一样
Remoting 使用TCP/IP 协议,服务端可以是服务,web服务器,类. 例子1. 远程调用服务端的类,就像调用客户端机器上的类一样. 服务端代码 (先定义被客户端调用的类,然后注 ...
随机推荐
- windows下如何创建没有名字的.htaccess文件
http://www.mdaima.com/jingyan/35.html WINDOWS下建立空名的.htaccess文件 ? 大家都知道,在windows环境下是不能直接建立没有名字的文件的,那我 ...
- 【WebApi系列】浅谈HTTP
[01]浅谈HTTP在WebApi开发中的运用 [02]聊聊WebApi体系结构 [03]详解WebApi如何传递参数 [04]详解WebApi测试和PostMan [05]浅谈WebApi Core ...
- 用photoshop将图片四角变成圆角
1.用PS打开一张图片,用矩形选框工具,选出你要保留的的那一部分,"选择→修改→平滑".在弹出的选框里添入数值,值越大角就越圆. 2.然后选择"选择→反选"再按 ...
- java.lang.NoClassDefFoundError: javax/mail/Authenticator
摘录自:http://stackoverflow.com/questions/1630002/java-lang-noclassdeffounderror-javax-mail-authenticat ...
- H5+混合移动app应用开发——坑我太甚
用了MUI之后,才发现,那坑比我想象之中的要多得多,有些是H5的坑,有些是plus的坑,接下来我一一来吐槽一番. IOS下面,上拉的时候,速度稍微快一点,表头自动隐藏,等你不拉的时候又自动显示 这种情 ...
- 如何将阿里云mysql RDS备份文件恢复到自建数据库
参考地址:https://help.aliyun.com/knowledge_detail/41817.html PS:目前恢复只支持 Linux 下进行.Linux下恢复的数据文件,无论 Windo ...
- 小程序选项卡小Demo,可滑动控制
思绪1.选项卡使用scroll-view,实现可以滑动控制效果:2.使用current控制选项卡标题和内容的统一,实现同步操作:3.winHeight 这个是我最常用的var calc = clien ...
- scrapy_数据收集
什么是数据收集器? 数据以key/value形式存在,收集一些状态,简化数据收集的状态 计算到底发送了多少request等等统计信息 如何对404页面进行设置? 通过response.status等于 ...
- 理解maven的核心概念
原文出处:http://www.cnblogs.com/holbrook/archive/2012/12/24/2830519.html 好久没进行java方面的开发了,最近又完成了一个java相关的 ...
- PHP中利用PHPMailer配合QQ邮箱实现发邮件
PHPMailer的介绍: 优点: 可运行在任何平台之上 支持SMTP验证 发送邮时指定多个收件人,抄送地址,暗送地址和回复地址:注:添加抄送.暗送仅win平台下smtp方式支持 支持多种邮件编码包括 ...