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 静态变量的初始化
Nov 15 PHP
PHP curl_setopt()函数实例代码与参数分析
Jun 02 PHP
php函数的常用方法及注意之处小结
Jul 10 PHP
PHP setTime 设置当前时间的代码
Aug 27 PHP
php页面缓存ob系列函数介绍
Oct 18 PHP
解析php框架codeigniter中如何使用框架的session
Jun 24 PHP
解析PHP中VC6 X86和VC9 X86的区别及 Non Thread Safe的意思
Jun 28 PHP
php单例模式实现方法分析
Mar 14 PHP
PHP页面跳转实现延时跳转的方法
Dec 10 PHP
php+ajax实现异步上传文件或图片功能
Jul 18 PHP
PHP获取文件扩展名的常用方法小结【五种方式】
Apr 27 PHP
PHP实现的AES双向加密解密功能示例【128位】
Sep 03 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
php curl_init函数用法
2014/01/31 PHP
js+php实现静态页面实时调用用户登陆状态的方法
2015/01/04 PHP
jQuery 获取对象 基本选择与层级
2010/05/31 Javascript
原生js写的放大镜效果
2012/08/22 Javascript
onmouseover和onmouseout的一些问题思考
2013/08/14 Javascript
jquery制作select列表双向选择示例代码
2014/09/02 Javascript
javascript实用方法总结
2015/02/06 Javascript
JavaScript检测浏览器cookie是否已经启动的方法
2015/02/27 Javascript
jQuery mobile 移动web(4)
2015/12/20 Javascript
全面详细的jQuery常见开发技巧手册
2016/02/21 Javascript
mint-ui 时间插件使用及获取选择值的方法
2018/02/09 Javascript
node.js实现为PDF添加水印的示例代码
2018/12/05 Javascript
浅析Angular 实现一个repeat指令的方法
2019/07/21 Javascript
Javascript中的this,bind和that使用实例
2019/12/05 Javascript
微信小程序实现多选框全选与反全选及购物车中删除选中的商品功能
2019/12/17 Javascript
python判断、获取一张图片主色调的2个实例
2014/04/10 Python
rabbitmq(中间消息代理)在python中的使用详解
2017/12/14 Python
详谈在flask中使用jsonify和json.dumps的区别
2018/03/26 Python
在Pandas中给多层索引降级的方法
2018/11/16 Python
OpenCV HSV颜色识别及HSV基本颜色分量范围
2019/03/22 Python
python3+PyQt5 使用三种不同的简便项窗口部件显示数据的方法
2019/06/17 Python
python3实现高效的端口扫描
2019/08/31 Python
pyecharts绘制中国2020肺炎疫情地图的实例代码
2020/02/12 Python
Python中的wordcloud库安装问题及解决方法
2020/05/27 Python
2021年值得向Python开发者推荐的VS Code扩展插件
2021/01/25 Python
详解CSS3中border-image的使用
2015/07/18 HTML / CSS
美国瑜伽品牌:Gaiam
2017/10/31 全球购物
adidas马来西亚官网:adidas MY
2020/09/12 全球购物
C++面试题目
2013/06/25 面试题
中专自我鉴定
2014/02/05 职场文书
试用期自我鉴定范文
2014/03/20 职场文书
幼儿园优秀班主任事迹材料
2014/05/14 职场文书
领导班子四风问题对照检查材料
2014/09/27 职场文书
深入浅析Redis 集群伸缩原理
2021/05/15 Redis
vue-router中hash模式与history模式的区别
2021/06/23 Vue.js
Python+SeaTable实现计算两个日期间的工作日天数
2022/07/07 Python