php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式


Posted in PHP onSeptember 28, 2018

先给大家介绍下php 与 nginx 的两种处理方式,具体内容如下所示:

1.IP:Port 监听方式

php-fpm
docker pull PHP:2.4-alpine
nginx.conf
fastcgi_pass 127.0.0.1:9000;

php-fpm 在容器里的 nginx.conf

location /php
    {     
      proxy_set_header Host $host:$server_port;
      proxy_pass http://138.38.38.111:80/;
    }

2.UDS 方式监听

php-fpm
listen = /tmp/php-fpm.sock
nginx.conf
fastcgi_pass unix:/tmp/php-fpm.sock;

3.注意

php-fpm用ip:port方式建立链接,

nginx不要用unix socket方式建立链接,用ip:port方式建立连接就行

下面看下nginx与php-fpm通信的两种方式

在linux中,nginx服务器和php-fpm可以通过tcp socket和unix socket两种方式实现。

unix socket是一种终端,可以使同一台操作系统上的两个或多个进程进行数据通信。这种方式需要再nginx配置文件中填写php-fpm的pid文件位置,效率要比tcp socket高。

tcp socket的优点是可以跨服务器,当nginx和php-fpm不在同一台机器上时,只能使用这种方式。

windows系统只能使用tcp socket的通信方式

配置方法

tcp socket

tcp socket通信方式,需要在nginx配置文件中填写php-fpm运行的ip地址和端口号。

location ~ \.php$ {
  include fastcgi_params;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;;
  fastcgi_pass 127.0.0.1:9000;
  fastcgi_index index.php;
}

unix socket

unix socket通信方式,需要在nginx配置文件中填写php-fpm运行的pid文件地址。

location ~ \.php$ {
  include fastcgi_params;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;;
  fastcgi_pass unix:/var/run/php5-fpm.sock;
  fastcgi_index index.php;
}

php-fpm的运行端口号和socket文件的地址都是在php-fpm.conf中配置的。 

php-fpm.conf文件在php安装文件的/etc目录下,

比如你的php安装在/opt/php目录,则应该是/opt/php/php-fpm.conf。

; The address on which to accept FastCGI requests.
; Valid syntaxes are:
;  'ip.add.re.ss:port'  - to listen on a TCP socket to a specific IPv4 address on
;              a specific port;
;  '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
;              a specific port;
;  'port'         - to listen on a TCP socket to all IPv4 addresses on a
;              specific port;
;  '[::]:port'      - to listen on a TCP socket to all addresses
;              (IPv6 and IPv4-mapped) on a specific port;
;  '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = 127.0.0.1:9000
listen = /var/run/php-fpm.sock

通过注释可以看到,php-fpm的listen指令可以通过五种方式处理FastCGI请求,分别是:

1. ipv4:端口号 
2. ipv6:端口号 
3. port相当于 0.0.0.0:port,本机所有ipv4对应的端口号 
4. [::]:port,包括ipv4和ipv6 
5. unix socket文件

直接配置使用unix socket文件之后,会遇到access deny的问题,由于socket文件本质上还是一个文件,存在权限控制问题,默认由root用户创建,因此nginx进程无权限访问,应该配置如下命令:

; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server. Many
; BSD-derived systems allow connections regardless of permissions.
; Default Values: user and group are set as the running user
;         mode is set to 0660
listen.owner = www
listen.group = www 
listen.mode = 0660

可以配置nginx和php-fpm都是用www用户,这样就不会存在权限问题,当然也可以创建不同的用户,然后加入同一个组,便于分配权限。

总结

以上所述是小编给大家介绍的php 与 nginx 的两种处理方式及nginx与php-fpm通信的两种方式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
php数组函数序列之array_unique() - 去除数组中重复的元素值
Oct 29 PHP
CodeIgniter基本配置详细介绍
Nov 12 PHP
PHP实现微信公众平台音乐点播
Mar 20 PHP
PHP也能干大事之PHP中的编码解码详解
Apr 20 PHP
PHP7安装Redis扩展教程【Linux与Windows平台】
Sep 30 PHP
php结合ajax实现手机发红包的案例
Oct 13 PHP
PHP水印类,支持添加图片、文字、填充颜色区域的实现
Feb 04 PHP
PHP实现微信图片上传到服务器的方法示例
Jun 29 PHP
PHP接口继承及接口多继承原理与实现方法详解
Oct 18 PHP
PHP5.5新特性之yield理解与用法实例分析
Jan 11 PHP
PHP生成二维码与识别二维码的方法详解【附源码下载】
Mar 07 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
Dec 25 PHP
PHP从尾到头打印链表实例讲解
Sep 27 #PHP
实现php删除链表中重复的结点
Sep 27 #PHP
浅析php如何实现爬取数据原理
Sep 27 #PHP
Laravel源码解析之路由的使用和示例详解
Sep 27 #PHP
php实现有序数组旋转后寻找最小值方法
Sep 27 #PHP
PHP实现SMTP邮件的发送实例
Sep 27 #PHP
ThinkPHP like模糊查询,like多匹配查询,between查询,in查询,一般查询书写方法
Sep 26 #PHP
You might like
ThinkPHP模板Switch标签用法示例
2014/06/30 PHP
如何使用php实现评委评分器
2015/07/31 PHP
ie 调试javascript的工具
2009/04/29 Javascript
javascript 继承实现方法
2009/08/26 Javascript
理解Javascript_08_函数对象
2010/10/15 Javascript
JavaScript中的变量声明早于赋值分析
2012/03/01 Javascript
SeaJS入门教程系列之完整示例(三)
2014/03/03 Javascript
JavaScript 里的类数组对象
2015/04/08 Javascript
jQuery基于toggle实现click触发DIV的显示与隐藏问题分析
2016/06/12 Javascript
jQuery.form.js插件不能解决连接超时(timeout)的原因分析及解决方法
2016/10/14 Javascript
微信小程序 下拉列表的实现实例代码
2017/03/08 Javascript
jquery.validate.js 多个相同name的处理方式
2017/07/10 jQuery
使用vs code开发Nodejs程序的使用方法
2017/09/21 NodeJs
浅谈Angular6的服务和依赖注入
2018/06/27 Javascript
vue实现打印功能的两种方法
2018/09/07 Javascript
vue中的watch监听数据变化及watch中各属性的详解
2018/09/11 Javascript
js实现通过开始结束控制的计时器
2019/02/25 Javascript
JavaScript数组去重实现方法小结
2020/01/17 Javascript
Vue-Ant Design Vue-普通及自定义校验实例
2020/10/24 Javascript
原生js实现下拉框选择组件
2021/01/20 Javascript
[05:05]给小松五分钟系列 第二期介绍为什么打DOTA2
2014/07/02 DOTA
python模拟enum枚举类型的方法小结
2015/04/30 Python
matplotlib在python上绘制3D散点图实例详解
2017/12/09 Python
python实现朴素贝叶斯算法
2018/11/19 Python
Python面向对象之类的定义与继承用法示例
2019/01/14 Python
python3连接kafka模块pykafka生产者简单封装代码
2019/12/23 Python
Html5 页面适配iPhoneX(就是那么简单)
2019/09/05 HTML / CSS
美国高级音响品牌:Master&Dynamic
2018/07/05 全球购物
信息管理员岗位职责
2013/12/01 职场文书
刑事代理授权委托书
2014/09/17 职场文书
居委会个人对照检查材料思想汇报
2014/09/29 职场文书
工程安全生产协议书
2014/11/21 职场文书
2016年端午节寄语
2015/12/04 职场文书
大学生奶茶店创业计划书
2019/06/25 职场文书
HTML+JS实现在线朗读器
2022/02/15 Javascript
pytorch实现加载保存查看checkpoint文件
2022/07/15 Python